如何使用API中的API MailJet以编程方式发送带有附件的电子邮件? [英] How can I send an email with attachement using the API MailJet in iOS programmatically?
本文介绍了如何使用API中的API MailJet以编程方式发送带有附件的电子邮件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
第一个错误
我使用这段代码,但我不知道如何在iOS中使用api Mailjet?在哪里放置API密钥是私人的,公共的等等...
我查看了
编辑
SECOND ERROR
新代码:
NSString * apiKey = @*******************;
NSString * secretKey = @**************;
NSString * mail = @******@******.***;
//保存帖子参数的词典。您可以设置您的服务器接受或编程接受的发布参数。
NSMutableDictionary * _params = [[NSMutableDictionary alloc] init];
[_params setObject:@1.0forKey:@ver];
[_params setObject:@enforKey:@lan];
[_params setObject:apiKey forKey:@apiKey];
[_params setObject:secretKey forKey:@secretKey];
//边界字符串:一个随机字符串,在后期数据中不会重复,以分隔后期数据字段。
NSString * BoundaryConstant = @---------- ***********;
// post参数'file'的字符串常量。我的服务器使用这个名字:`file`。你的可能不同
NSString * FileParamConstant = @file;
//上传图像(或媒体)的服务器URL。在这里使用你的服务器url
NSURL * requestURL = [NSURL URLWithString:@https://api.mailjet.com/v3/send/];
//创建请求
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
[请求setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[请求setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@POST];
// HTTP基本身份验证
NSString * authenticationString = [NSString stringWithFormat:@%@:%@,apiKey,secretKey];
NSData * authenticationData = [authenticationString dataUsingEncoding:NSASCIIStringEncoding];
NSString * authenticationValue = [authenticationData base64Encoding];
[request setValue:[NSString stringWithFormat:@Basic%@,authenticationValue] forHTTPHeaderField:@Authorization];
//设置HTTP头中的内容类型
NSString * contentType = [NSString stringWithFormat:@@application / json; boundary =%@,BoundaryConstant];
[request setValue:contentType forHTTPHeaderField:@Content-Type];
[request addValue:apiKey forHTTPHeaderField:@apiKey];
[request addValue:secretKey forHTTPHeaderField:@secretKey];
// post bodyv
NSMutableData * body = [NSMutableData data];
//添加params(所有参数都是字符串)
for(NSString * param in _params){
[body appendData:[[NSString stringWithFormat:@ - %@ \r\\\
,BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@Content-Disposition:form-data; name = \%@ \\r\\\
\r\\\
,param] dataUsingEncoding :NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@%@ \\\\,[_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]];
}
//添加图像数据
UIImage * image = [UIImage imageWithContentsOfFile:filePath];
NSData * imageData = UIImageJPEGRepresentation(image,1.0);
if(imageData){
[body appendData:[[NSString stringWithFormat:@ - %@ \\\\
,BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@Content-Disposition:form-data; FromEmail:\contact @ ****。fr \; \Text-part\ \Dear\;收件人:[{\Email\:\**** @ gmail.com \}]; name = \%@ \; filename = \image.jpg\\r\\\
,FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@Content-Type:image / jpeg\r\\\
\r\\\
dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@\r\\\
] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@ - %@ - \r\\\
,BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
//将帖子的正文设置为reqeust
[请求setHTTPBody:body];
//设置内容长度
NSString * postLength = [NSString stringWithFormat:@%lu,(unsigned long)[body length]];
[request setValue:postLength forHTTPHeaderField:@Content-Length];
//设置URL
[请求setURL:requestURL];
NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData * data,NSURLResponse * response,NSError * error){
NSString * requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]
NSLog(@requestReply:%@,error:%@,requestReply,error);
}] resume];
新的错误消息:
任何想法?
解决方案
这是代码:
- (void)sendToMail :( NSString *)mailingList
{
NSString * filePath = [[self documentsDirectory] stringByAppendingPathComponent:STATS_FILE];
NSFileManager * fileManager = [NSFileManager defaultManager];
mailingList = MAILING_LIST;
if([fileManager fileExistsAtPath:filePath])
{
//保存帖子参数的字典。您可以设置您的服务器接受或编程接受的发布参数。
NSMutableDictionary * _params = [[NSMutableDictionary alloc] init];
[_params setObject:@xxxx@xxxx.xxxforKey:@FromEmail];
[_params setObject:@xxx xxx xxxxforKey:@FromName];
[_params setObject:@xxx xxx xxxforKey:@Subject];
[_params setObject:@xxx xxxx xxxxforKey:@Html-part];
//邮件处理
NSUInteger numberOfOccurrences = [[mailingList componentsSeparatedByString:@;] count] - 1;
NSArray * subStrings = [mailingList componentsSeparatedByString:@;];
NSMutableArray * mailsArr = [NSMutableArray new];
for(int i = 0; i< = numberOfOccurrences; i ++)
{
NSString * = [subStrings objectAtIndex:i];
if([self validEmail:mail])
[mailsArr addObject:@ {@Email:mail}];
}
if([mailsArr count]> 0)
[_params setObject:mailsArr forKey: @ 收件人];
//将任何附件文件添加到JSON
NSData * data = [NSData dataWithContentsOfFile:filePath];
if(data)
{
NSString * encodedString = [data base64EncodedStringWithOptions:0];
NSArray * attachmentsArr = @ [@ {@Content-type:@text / plain,@Filename:[NSString stringWithFormat:@%@。db,[[[ UIDevice currentDevice] identifierForVendor] UUIDString]],@content:encodedString}];
[_params setObject:attachmentsArr forKey:@Attachments];
}
//上传图片(或媒体)的服务器网址。在这里使用你的服务器url
NSURL * requestURL = [NSURL URLWithString:@https://api.mailjet.com/v3/send/];
//创建请求
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
[请求setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[请求setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[请求setHTTPMethod:@POST];
// HTTP基本身份验证
NSString * authenticationString = [NSString stringWithFormat:@%@:%@,API_KEY,SECRET_KEY] ;
NSData * authenticationData = [authenticationString dataUsingEncoding:NSASCIIStringEncoding];
NSString * authenticationValue = [authenticationData base64EncodedStringWithOptions:0];
[request setValue:[NSString stringWithFormat:@Basic%@,authenticationValue] forHTTPHeaderField:@Authorization];
NSString * jsonRequest = [_params JSONRepresentation];
NSLog(@jsonRequest is%@,jsonRequest);
NSMutableData * requestData = [[jsonRequest dataUsingEncoding:NSUTF8StringEncoding] mutableCopy];
[请求setHTTPMethod:@POST];
[request setValue:@application / jsonforHTTPHeaderField:@Accept];
[request setValue:@application / jsonforHTTPHeaderField:@Content-Type];
//将帖子的正文设置为请求
[请求setHTTPBody:requestData];
//设置内容长度
NSString * postLength = [NSString stringWithFormat:@%lu,(unsigned long)[ requestData length]];
[request setValue:postLength forHTTPHeaderField:@Content-Length];
[请求setURL:requestURL]; //设置URL
NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData * data,NSURLResponse * response,NSError * error){
NSString * requestReply = [[NSString alloc] initWithData:数据编码:NSASCIIStringEncoding];
#if DEBUG
NSLog(@requestReply:%@,error:%@,requestReply,error);
#endif
if(error == nil)
{
[self showAlertWithMessage:@文件发送! withButton:@ OK!];
}
其他
{
[self showAlertWithMessage:@无法发送文件! withButton:@ OK!];
}
}] resume];
}
FIRST ERROR
I use this code but I don't know how to use the api Mailjet in iOS ? Where to put the API key private, the public etc... I check the github mailjet, the doc mailJet about the API without success.
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSLog(@"File Size: %lu",(unsigned long)[data length]);
//set up request
NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"https://api.mailjet.com/v3/send"]];
[request setHTTPMethod:@"POST"];
//required xtra info
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
//body of the post
NSMutableData *postbody = [NSMutableData data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"thefile\"; filename=\"recording\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:[@"Content-Type: application/octet-stream\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postbody appendData:data];
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:postbody];
NSURLConnection *apiConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
I do tests with sending "manually", and I have that bad answer. Where I have to put the API KEY and the SECRET KEY ?
EDIT
SECOND ERROR
New code :
NSString *apiKey = @"*******************";
NSString *secretKey = @"**************";
NSString *mail = @"******@******.***";
// Dictionary that holds post parameters. You can set your post parameters that your server accepts or programmed to accept.
NSMutableDictionary* _params = [[NSMutableDictionary alloc] init];
[_params setObject:@"1.0" forKey:@"ver"];
[_params setObject:@"en" forKey:@"lan"];
[_params setObject:apiKey forKey:@"apiKey"];
[_params setObject:secretKey forKey:@"secretKey"];
// the boundary string : a random string, that will not repeat in post data, to separate post data fields.
NSString *BoundaryConstant = @"----------***********";
// string constant for the post parameter 'file'. My server uses this name: `file`. Your's may differ
NSString* FileParamConstant = @"file";
// the server url to which the image (or the media) is uploaded. Use your server url here
NSURL* requestURL = [NSURL URLWithString:@"https://api.mailjet.com/v3/send/"];
// create request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
//HTTP Basic Authentication
NSString *authenticationString = [NSString stringWithFormat:@"%@:%@", apiKey, secretKey];
NSData *authenticationData = [authenticationString dataUsingEncoding:NSASCIIStringEncoding];
NSString *authenticationValue = [authenticationData base64Encoding];
[request setValue:[NSString stringWithFormat:@"Basic %@", authenticationValue] forHTTPHeaderField:@"Authorization"];
// set Content-Type in HTTP header
NSString *contentType = [NSString stringWithFormat:@"@"application/json"; boundary=%@", BoundaryConstant];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];
[request addValue:apiKey forHTTPHeaderField:@"apiKey"] ;
[request addValue:secretKey forHTTPHeaderField:@"secretKey"] ;
// post bodyv
NSMutableData *body = [NSMutableData data];
// add params (all params are strings)
for (NSString *param in _params) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", param] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@\r\n", [_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]];
}
// add image data
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
if (imageData) {
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; FromEmail:\"contact@****.fr\"; \"Text-part\":\"Dear\" ; Recipients:[{\"Email\":\"****@gmail.com\"}]; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
// set URL
[request setURL:requestURL];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"requestReply: %@, error: %@", requestReply, error);
}] resume];
New error message:
Any ideas?
解决方案
Here is the code:
- (void) sendToMail:(NSString *)mailingList
{
NSString *filePath = [[self documentsDirectory] stringByAppendingPathComponent:STATS_FILE];
NSFileManager *fileManager = [NSFileManager defaultManager];
mailingList = MAILING_LIST;
if ([fileManager fileExistsAtPath:filePath])
{
// Dictionary that holds post parameters. You can set your post parameters that your server accepts or programmed to accept.
NSMutableDictionary* _params = [[NSMutableDictionary alloc] init];
[_params setObject:@"xxxx@xxxx.xxx" forKey:@"FromEmail"];
[_params setObject:@"xxx xxx xxxx" forKey:@"FromName"];
[_params setObject:@"xxx xxx xxx" forKey:@"Subject"];
[_params setObject:@"xxx xxxx xxxx" forKey:@"Html-part"];
//mail(s) treatment
NSUInteger numberOfOccurrences = [[mailingList componentsSeparatedByString:@";"] count] - 1;
NSArray *subStrings = [mailingList componentsSeparatedByString:@";"];
NSMutableArray *mailsArr = [NSMutableArray new];
for (int i=0; i<=numberOfOccurrences; i++)
{
NSString *mail = [subStrings objectAtIndex:i];
if ([self validEmail:mail])
[mailsArr addObject:@{@"Email":mail}];
}
if ([mailsArr count] > 0)
[_params setObject:mailsArr forKey:@"Recipients"];
//add any attachment file to JSON
NSData* data = [NSData dataWithContentsOfFile:filePath];
if (data)
{
NSString *encodedString = [data base64EncodedStringWithOptions:0];
NSArray *attachmentsArr = @[@{@"Content-type":@"text/plain", @"Filename":[NSString stringWithFormat:@"%@.db", [[[UIDevice currentDevice] identifierForVendor] UUIDString]], @"content":encodedString}];
[_params setObject:attachmentsArr forKey:@"Attachments"];
}
// the server url to which the image (or the media) is uploaded. Use your server url here
NSURL* requestURL = [NSURL URLWithString:@"https://api.mailjet.com/v3/send/"];
// create request
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[request setHTTPShouldHandleCookies:NO];
[request setTimeoutInterval:30];
[request setHTTPMethod:@"POST"];
//HTTP Basic Authentication
NSString *authenticationString = [NSString stringWithFormat:@"%@:%@", API_KEY, SECRET_KEY];
NSData *authenticationData = [authenticationString dataUsingEncoding:NSASCIIStringEncoding];
NSString *authenticationValue = [authenticationData base64EncodedStringWithOptions:0];
[request setValue:[NSString stringWithFormat:@"Basic %@", authenticationValue] forHTTPHeaderField:@"Authorization"];
NSString *jsonRequest = [_params JSONRepresentation];
NSLog(@"jsonRequest is %@", jsonRequest);
NSMutableData *requestData = [[jsonRequest dataUsingEncoding:NSUTF8StringEncoding] mutableCopy];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// setting the body of the post to the request
[request setHTTPBody:requestData];
// set the content-length
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[requestData length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setURL:requestURL]; // set URL
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
#if DEBUG
NSLog(@"requestReply: %@, error: %@", requestReply, error);
#endif
if (error == nil)
{
[self showAlertWithMessage:@"File sent!" withButton:@"Ok!"];
}
else
{
[self showAlertWithMessage:@"Could not send file!" withButton:@"Ok!"];
}
}] resume];
}
这篇关于如何使用API中的API MailJet以编程方式发送带有附件的电子邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文