Sample code for 30+ languages & platforms
Objective-C

Outlook Send Email using MIME Format

See more Outlook Examples

This example sends an email using MIME format via the Microsoft Graph Outlook REST API.

Chilkat Objective-C Downloads

Objective-C
#import <CkoHttp.h>
#import <CkoJsonObject.h>
#import <CkoEmail.h>
#import <NSString.h>
#import <CkoStringBuilder.h>
#import <CkoBinData.h>
#import <CkoHttpResponse.h>

BOOL success = NO;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

CkoHttp *http = [[CkoHttp alloc] init];

// Use your previously obtained access token here:
// See the following examples for getting an access token:
//    Get Microsoft Graph OAuth2 Access Token (Azure AD v2.0 Endpoint).
//    Get Microsoft Graph OAuth2 Access Token (Azure AD Endpoint).
//    Refresh Access Token (Azure AD v2.0 Endpoint).
//    Refresh Access Token (Azure AD Endpoint).

CkoJsonObject *jsonToken = [[CkoJsonObject alloc] init];
success = [jsonToken LoadFile: @"qa_data/tokens/microsoftGraph.json"];
if (success == NO) {
    NSLog(@"%@",jsonToken.LastErrorText);
    return;
}

http.AuthToken = [jsonToken StringOf: @"access_token"];

// To send email, we'll POST to the following endpoint:
// 
// POST /users/{id | userPrincipalName}/sendMail
// 
// (The special keyword "me" may be used in place of a principal name.)
// 

// The body of the POST request will contain the MIME source of the email in base64 format.

// Create a new email object
CkoEmail *email = [[CkoEmail alloc] init];
email.Subject = @"Test Outlook API to Send HTML Email with Attachments";
email.From = @"Mary <mary@somewhere.com>";
[email AddTo: @"Joe" emailAddress: @"joe@example.com"];

// Add a plain-text alternative body, which will likely never be seen.
// (It is shown if the receiving email client is incapable of displaying HTML email.)
[email AddPlainTextAlternativeBody: @"This is a plain-text alternative body..."];

// Our HTML will include an image, so add the related image here.
NSString *contentIdStarfish = [email AddRelatedFile: @"qa_data/jpg/starfish.jpg"];
if (email.LastMethodSuccess == NO) {
    NSLog(@"%@",email.LastErrorText);
    return;
}

// The src attribute for the image tag is set to the contentIdStarfish:
CkoStringBuilder *sbHtml = [[CkoStringBuilder alloc] init];
[sbHtml Append: @"<html><body><p>This is an HTML email with an embedded image.</p>"];
[sbHtml Append: @"<p><img src=\"cid:CONTENT_ID_STARFISH\" /></p></body></html>"];
int numReplacements = [[sbHtml Replace: @"CONTENT_ID_STARFISH" replacement: contentIdStarfish] intValue];

[email AddHtmlAlternativeBody: [sbHtml GetAsString]];

// Finally, add some attachments to the email.
// Add a file attachment.
success = [email AddFileAttachment2: @"qa_data/pdf/fishing.pdf" contentType: @"application/pdf"];
if (success == NO) {
    NSLog(@"%@",email.LastErrorText);
    return;
}

// Add an attachment where the content is contained in a string.
NSString *content = @"This is the content of the 2nd attached file.";
[email AddStringAttachment: @"someText.txt" str: content];

// Get the email as multi-line base64..
CkoBinData *bdMime = [[CkoBinData alloc] init];
[email GetMimeBd: bdMime];

// Now get it as multi-line base64
CkoStringBuilder *sbBase64 = [[CkoStringBuilder alloc] init];
[bdMime GetEncodedSb: @"base64_mime" sb: sbBase64];

// Send the HTTP POST (i.e. send the email)
CkoHttpResponse *resp = [[CkoHttpResponse alloc] init];
success = [http HttpSb: @"POST" url: @"https://graph.microsoft.com/v1.0/me/sendMail" sb: sbBase64 charset: @"utf-8" contentType: @"text/plain" response: resp];
if (success == NO) {
    NSLog(@"%@",http.LastErrorText);
    return;
}

// The send succeeded if the response status code = 202.
// In the success case, there is no response body.  (We just get the response code to know that it succeeded.)
if ([resp.StatusCode intValue] != 202) {
    CkoJsonObject *json = [[CkoJsonObject alloc] init];
    [json Load: resp.BodyStr];
    json.EmitCompact = NO;
    NSLog(@"%@",[json Emit]);
    NSLog(@"%@%d",@"Failed, response status code = ",[resp.StatusCode intValue]);
}
else {
    NSLog(@"%@",@"Outlook Mail Sent.");
}