アプリからメールを送信するために SKPSMTPMessage を使用しています。これにより、メールに画像を添付して、ユーザーが送信ボタンをタップしなくてもその画像を自動的に送信できます。これは、電子メール アカウントに画像を送信するのに最適です。しかし、Verizon 経由で自分の携帯電話に、ATT 経由で同僚の携帯電話に画像を送信しようとしました。両方とも 123456789@vzwpix.com と 1234567890@mms.att.com の形式を使用した MMS メッセージです。クレイジーなことに、メッセージは Gmail の送信済みアイテムに表示されますが、MMS として携帯電話に配信されることはありません。しかし、gmail にログインしてまったく同じメッセージを 123456789@vzwpix.com に転送すると、メッセージは確実に配信されます。画像サイズもわずか約42KB。
私はこれに非常に混乱しています.gmailが理解できる方法でメッセージをフォーマットしていないので、gmailがメッセージを電話に適切に配信できないのではないかと思います. これが私がメールを作成するために使用しているコードです
SKPSMTPMessage *testMsg = [[SKPSMTPMessage alloc] init];
testMsg.fromEmail = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emUsername_key", preset]];
testMsg.toEmail = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@toEmail_key", preset]];
testMsg.relayHost = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emailServer_key", preset]];
testMsg.port = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emailPort_key", preset]];
testMsg.requiresAuth = [[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@requiresAuth_key", preset]];
testMsg.login = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emUsername_key", preset]];
testMsg.pass = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emPassword_key", preset]];
testMsg.subject = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emailSubject_key", preset]];
testMsg.wantsSecure = [[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"%@secureEmail_key", preset]];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * customPort = [f numberFromString:testMsg.port];
defaultPorts = [[NSArray alloc] initWithObjects:customPort, [NSNumber numberWithShort:587], [NSNumber numberWithShort:25], [NSNumber numberWithShort:465], nil];
[f release];
testMsg.relayPorts = defaultPorts;
testMsg.delegate = self;
NSString *image_path = [NSString stringWithFormat:@"%@/%@", dir, file];
NSData *imageData1 = [NSData dataWithContentsOfFile:image_path];// sendImage is a UIImage *sendImage which contains original image and I defined it in Global.h
NSString* theFileExt = [[file lastPathComponent] pathExtension];
NSString *fileTitle1;
NSString *fileTitle2 = [NSString stringWithFormat:@"attachment;\r\n\tfilename=\"%@\"", title];
NSDictionary *vcfPart;
if([theFileExt compare:@"png"] == NSOrderedSame){
fileTitle1 = [NSString stringWithFormat:@"image/png;\r\n\tx-unix-mode=0644;\r\n\tname=\"%@\"", title];
}else if([theFileExt compare:@"jpg"] == NSOrderedSame){
fileTitle1 = [NSString stringWithFormat:@"image/jpg;\r\n\tx-unix-mode=0644;\r\n\tname=\"%@\"", title];
}
encodedString = nil;
size_t outBufferEstLength = EstimateBas64EncodedDataSize([imageData1 length]) + 1;
char *outBuffer = calloc(outBufferEstLength, sizeof(char));
size_t outBufferLength = outBufferEstLength;
if (Base64EncodeData([imageData1 bytes], [imageData1 length], outBuffer, &outBufferLength))
{
encodedString = [NSString stringWithCString:outBuffer encoding:NSASCIIStringEncoding];
}
else
{
[NSException raise:@"NSData+Base64AdditionsException" format:@"Unable to encode data!"];
}
free(outBuffer);
vcfPart = [NSDictionary dictionaryWithObjectsAndKeys:fileTitle1,kSKPSMTPPartContentTypeKey,
fileTitle2,kSKPSMTPPartContentDispositionKey,encodedString,kSKPSMTPPartMessageKey,@"base64",kSKPSMTPPartContentTransferEncodingKey,nil];
NSString * bodyMessage = [[NSUserDefaults standardUserDefaults] stringForKey:[NSString stringWithFormat:@"%@emailSignature_key", preset]];
NSDictionary *plainPart = [NSDictionary dictionaryWithObjectsAndKeys:@"text/plain",kSKPSMTPPartContentTypeKey,
bodyMessage ,kSKPSMTPPartMessageKey,@"8bit",kSKPSMTPPartContentTransferEncodingKey,nil];
testMsg.parts = [NSArray arrayWithObjects:plainPart,vcfPart,nil];
[testMsg send];
[encodedString release];
そして、gmailでメッセージ内容を確認する際に生成・表示されるヘッダーがこちら
Return-Path: <myACCT@gmail.com>
Received: from localhost (000.sub-000-000-000.myvzw.com. [000.000.000.000])
by mx.google.com with ESMTPS id lotsOfStoof.0.2013.01.06.15.22.03
(version=TLSv1/SSLv3 cipher=OTHER);
Sun, 06 Jan 2013 15:22:05 -0800 (PST)
Message-ID: <some.stuff.here.kids@mx.google.com>
Date: Sun, 06 Jan 2013 15:22:05 -0800 (PST)
From: myACCT@gmail.com
To: 123456789@vzwpix.com
Content-Type: multipart/mixed; boundary=SKPSMTPMessage--Separator--Delimiter
Mime-Version: 1.0 (SKPSMTPMessage 1.0)
Subject: MYAPP!
--SKPSMTPMessage--Separator--Delimiter
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
Sent from MYAPP. Get it on iTunes!
--SKPSMTPMessage--Separator--Delimiter
Content-Disposition: attachment;
filename="MYAPPIMAGENAME"
Content-Type: image/jpg;
x-unix-mode=0644;
name="MYAPPIMAGENAME"
Content-Transfer-Encoding: base64
どんなガイダンスも素晴らしいでしょう。前もって感謝します!
編集:私はこの問題をいじっていますが、何が原因なのかまだわかりません. Gmail がメッセージを中継できることは知っています。私は何が欠けていますか?
ありがとう