IOS mail encoding (creating mime mail for SES)

I am developing an application in which I send mail without IOS API mail (mail is sent using amazon SES without user interaction and file attachments ...). In my API, I have to send encoded mail with the entire MIME protocol (this is not a problem). I am sending email messages encoding an ascii and pdf encoded body that I attach in base64:

   CFUUIDRef    uuidRef   = CFUUIDCreate(kCFAllocatorDefault);
NSString    *uuid     = (__bridge_transfer  NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
CFRelease(uuidRef);

//Encapsulation
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableString *rawMime = [[NSMutableString alloc] init];
[rawMime appendFormat:@"To: %@\n", _to];
[rawMime appendFormat:@"From: \"%@\" <boutique@tactill.com>\n", [defaults objectForKey:@"companyName"]];
[rawMime appendFormat:@"Reply-To: %@\n", [defaults objectForKey:@"toEmailForStats"]];
[rawMime appendFormat:@"BCC: %@\n", [defaults objectForKey:@"toEmailForStats"]];
[rawMime appendFormat:@"Subject: %@\n", _subject];
[rawMime appendString:@"Date: Thu, 05 Jan 95 10:53:24 -0500\n"];
[rawMime appendFormat:@"Message-ID: <%@@%@>\n", [(NSString *)uuid stringByReplacingOccurrencesOfString:@"-" withString:@""], @"IETF.CNR I.Reston.VA.US"];
[rawMime appendString:@"Mime-Version: 1.0\n"];
[rawMime appendString:@"Content-type: Multipart/Mixed; boundary=\"NextPart\"\n"];
[rawMime appendString:@"\n"];
[rawMime appendString:@"--NextPart\n"];

//Body
[rawMime appendString:@"Content-type: text/plain; charset=\"us-ascii\"\n"];
[rawMime appendString:@"\n"];
[rawMime appendString:_body];
[rawMime appendString:@"\n"];
[rawMime appendString:@"--NextPart\n"];

//Attach pdf
[rawMime appendString:@"Content-Type: application/pdf; "];
[rawMime appendFormat:@"name=\"%@.pdf\";\n", _pdfName];
[rawMime appendFormat:@"Content-Transfer-Encoding: base64\r\n\r\n"];
[rawMime appendFormat:@"%@\n",_pdfAttached];
[rawMime appendString:@"\n"];

//If necessary attach csv
if (_csvAttached!=nil) {
    [rawMime appendString:@"--NextPart\n"];
    [rawMime appendString:@"Content-Type: text/plain; "];
    [rawMime appendFormat:@"name=\"%@.txt\";\n", _csvName];
    [rawMime appendFormat:@"Content-Transfer-Encoding: base64\r\n\r\n"];
    [rawMime appendFormat:@"%@\n",_csvAttached];
    [rawMime appendString:@"\n"];
    [rawMime appendString:@"--NextPart\n"];
}


NSData        *rawMessageData = [rawMime dataUsingEncoding:NSUTF8StringEncoding];

gmail (OSX IOS), , Windows, . , , Windows iso-8859-1 (NSISOLatin1StringEncoding). : [http://stackoverflow.com/questions/4553388/how-to-convert-utf8-encoding-to-iso-8859-1-encoding][1]

   //add body
char converted[([_body length] + 1)];
[_body getCString:converted maxLength:([_body length] + 1) encoding: NSISOLatin1StringEncoding];   
[rawMime appendString:@"Content-type: text/plain; charset=iso-8859-1\n"];
[rawMime appendFormat:@"Content-Transfer-Encoding: quoted-printable\r\n\r\n"];
[rawMime appendFormat:@"%s", converted];
[rawMime appendString:@"\n"];
[rawMime appendString:@"--NextPart\n"];

: Merci pour votre achat. ¿ bientà ™ t! NSLog, ? ?

+3
1

, pdf, csv

-(NSData*)formatedMail{


    CFUUIDRef   uuidRef   = CFUUIDCreate(kCFAllocatorDefault);
    NSString    *uuid     = (__bridge_transfer  NSString *)CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
    CFRelease(uuidRef);

    NSDate* today = [[NSDate alloc] init];
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];

    NSString* date =[dateFormatter stringFromDate:today];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableString *rawMime = [[NSMutableString alloc] init];
    [rawMime appendFormat:@"To: %@\n", email_to];
    [rawMime appendFormat:@"From: \"name_from" <e-mail_from>\n", [defaults objectForKey:@"companyName"]];
    [rawMime appendFormat:@"Reply-To: %@\n", [defaults objectForKey:@"toEmailForStats"]];
    [rawMime appendFormat:@"BCC: %@\n", [defaults objectForKey:@"toEmailForStats"]];
    [rawMime appendFormat:@"Subject: %@\n", _subject];
    [rawMime appendFormat:@"Date: %@\n", date];
    [rawMime appendFormat:@"Message-ID: <%@@%@>\n", [(NSString *)uuid stringByReplacingOccurrencesOfString:@"-" withString:@""], @"IETF.CNR I.Reston.VA.US"];
    [rawMime appendString:@"Mime-Version: 1.0\n"];
    [rawMime appendString:@"Content-type: Multipart/Mixed; boundary=\"NextPart\"\n"];
    [rawMime appendString:@"\n"];
    [rawMime appendString:@"--NextPart\n"];

    //Here come the body part
    [rawMime appendString:@"Content-type: text/plain; charset=\"UTF-8\"\n"];
    [rawMime appendString:@"\n"];
    [rawMime appendString:_body];
    [rawMime appendString:@"\n"];
    [rawMime appendString:@"--NextPart\n"];

    //Attach pdf
    [rawMime appendString:@"Content-Type: application/pdf; "];
    [rawMime appendFormat:@"name=\"%@.pdf\";\n", _pdfName];
    [rawMime appendFormat:@"Content-Transfer-Encoding: base64\r\n\r\n"];
    [rawMime appendFormat:@"%@\n",_pdfAttached];
    [rawMime appendString:@"\n"];

    //If necessary attach csv
    if (_csvAttached!=nil) {
        [rawMime appendString:@"--NextPart\n"];
        [rawMime appendString:@"Content-Type: application/octet-stream; "];
        [rawMime appendFormat:@"name=\"%@\";\n", _csvName];
        [rawMime appendFormat:@"Content-Transfer-Encoding: base64\r\n\r\n"];
        [rawMime appendFormat:@"%@\n",_csvAttached];
        [rawMime appendString:@"\n"];
        [rawMime appendString:@"--NextPart\n"];
    }


    NSData        *rawMessageData = [rawMime dataUsingEncoding:NSUTF8StringEncoding];

    return rawMessageData;
}

_pdfAttached - NSString, PDF, base64 , ,

, . , , SESSendRawEmailRequest, , " " . , , , SESSendRawMessage. , , SESSEndRawEmailRequest, .

+3

All Articles