Objective-C
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
#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.");
}