Skip to content

Mime parsing in Swift | Relevant RFCs: RFC 822, RFC 2045, RFC 2046

License

Notifications You must be signed in to change notification settings

miximka/MimeParser

Repository files navigation

Build Status

About

MimeParser is a simple MIME (Multipurpose Internet Mail Extensions) parsing library written in Swift (to learn more about mimes refer to RFC 822, RFC 2045, RFC 2046)

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

To integrate MimeParser into your Xcode project using CocoaPods, specify it in your Podfile:

project '<Your Project Name>.xcodeproj'
platform :osx, '10.12'

target 'Test' do
  use_frameworks!
  pod 'MimeParser', '~> 0.1'
end

Then, run the following command:

$ pod install

Usage

Import MimeParser before using it:

import MimeParser

Create parser object:

let parser = MimeParser()

Let this be a simplest mime to be parsed:

let str = """
	Content-Type: text/plain
	
	Test
	"""

You are ready to parse the mime:

let mime = try parser.parse(str)

Returned mime object is a root of the mime tree and provides access to its header fields and content:

public enum MimeContent {
    case body(MimeBody)
    case mixed([Mime])
    case alternative([Mime])
}

public struct MimeHeader {
    public let contentTransferEncoding: ContentTransferEncoding?
    public let contentType: ContentType?
    public let contentDisposition: ContentDisposition?
    public let other: [RFC822HeaderField]
}

if let contentTypeString = mime.header.contentType?.raw {
	print("\(contentTypeString)")
	// "text/plain"
}

if case .body(let body) = mime.content {
	print("\(body.raw)")
	// "Test"
}

Decoded mime's content is simply to retrieve:

let content = try mime.decodedContentData()
// "Test"

License

MimeParser is available under the MIT license. See the LICENSE file for more info.

Contribution

MimeParser is still very simple and incomplete, so pull requests welcome!