前回は、HTMLメールを作成したが、今回は、添付ファイル付メールです。
メールの送信の全体の流れは変わりませんので、今回は添付ファイルのメッセージを作成する部分だけ説明します。
ただし、今回もライブラリを新しくなったので、こちらからもっとも新しいバージョンをダウンロードしてください。
前回、setTextBodyにちょっとバグを埋め込んでしまいましたしたので、こちらも修正しました。(詳細)
さて、添付メールの説明です。
といっても非常に簡単です。
var contentType:ContentType = ContentType.MULTIPART_MIXED;
var mimeMsg:MimeMessage = new MimeMessage(contentType);
:
省略
:
var filePart:MimeBinaryPart = new MimeBinaryPart();
filePart.setAttachementFile(File.desktopDirectory.resolvePath("image.jpg"),"添付ファイル.jpg");
mimeMsg.addChildPart(filePart);
sender.send(mimeMsg);
sender.close();
で終了です。
ここで、MimeBinaryPartは、自動的にContent-Typeが、application/octet-streamになります。
また、
filePart.setAttachementFile(file:File,filename:String):void
で、添付ファイルをつけます。
上の例のように、添付するファイルが画像の場合には以下のようにContent-Typeを変更してもいいかもしれません。
var filePart:MimeBinaryPart = new MimeBinaryPart()
filePart.contentType.setMainType("image");
filePart.contentType.setSubType("jpeg");
または、
filePart:MimeImagePart = new MimeImagePart();
とすることで、image/xxxx のようになります。
xxxxの部分は、添付するファイルの拡張子で変わります。



こんにちは。
添付ファイルを送りたくて参考にさせていただいていますが、載っているソースを使用してテストをしていますが、本文(Body)を入れると添付ファイルなしのメールが送られ、本文なしだとうまく添付ファイルが送れます。なにか考えられることはありますか?
ちなみに以下テストソースです。
package
{
import com.coltware.airxmail.ContentType;
import com.coltware.airxmail.INetAddress;
import com.coltware.airxmail.MailSender.SMTPSender;
import com.coltware.airxmail.MimeBinaryPart;
import com.coltware.airxmail.MimeMessage;
import com.coltware.airxmail.MimeTextPart;
import com.coltware.airxmail.RecipientType;
import flash.display.Sprite;
import flash.filesystem.File;
import org.purepdf.pdf.fonts.StreamFont;
public class airxMail extends Sprite
{
public function airxMail()
{
}
public function sendmail():void
{
var sender:SMTPSender = new SMTPSender();
// ここで必要な環境設定を行う
//サーバー名
sender.setParameter(SMTPSender.HOST,[MySMTP]);
//ポート番号:SMTPSender.PORT(数値型)
sender.setParameter(SMTPSender.PORT,25);
//認証を使う指定:SMTPSender.AUTH(Boolean型)
sender.setParameter(SMTPSender.AUTH,false);
//ユーザ名:SMTPSender.USERNAME(文字列型)
sender.setParameter(SMTPSender.USERNAME,[USER NAME]);
sender.setParameter(SMTPSender.PASSWORD,[PASSWORD]);
//SSL/TLSを使う指定:SMTPSender.SSL(Boolean型)
sender.setParameter(SMTPSender.SSL,false);
var contentType:ContentType = ContentType.MULTIPART_ALTERNATIVE;
var mimeMsg:MimeMessage = new MimeMessage(contentType);
var from:INetAddress = new INetAddress();
from.personal = [XXXXX];
from.address = [e-mail];
mimeMsg.setFrom(from);
var toAddr:INetAddress = new INetAddress([e-mail],[XXXXX]);
mimeMsg.addRcpt(RecipientType.TO,toAddr);
// set mail subject
mimeMsg.setSubject(“これは日本語メールです”);
mimeMsg.setTextBody(“this is multipart message”);
// TextPart
var partText:MimeTextPart = mimeMsg.createTextPart();
partText.setText(“これは通常の本文”);
//添付ファイル
var filePart:MimeBinaryPart = new MimeBinaryPart();
filePart.setAttachementFile(File.documentsDirectory.resolvePath([FileName]),[FileName]);
mimeMsg.addChildPart(filePart);
sender.send(mimeMsg);
sender.close();
}
}
}
以上、何かわかれば教えてください。
すみません。当方の間違いが見つかりました。
var contentType:ContentType = ContentType.MULTIPART_MIXED;
を
var contentType:ContentType = ContentType.MULTIPART_ALTERNATIVE;
としていました。
修正後うまくいきました。失礼しました。
よかったです。
返事が遅れている間に、解決できたようで・・
このあたりは、MIMEの仕様の部分で・・・
たとえば、ALTERNATIVE(multipart/alternative)などは、
HTMLメールなどに使うのですが・・
たいていは、multipart/mixedで問題ないはずです。
すぐに返事が出来かはわかりませんが、
その他でも、何かあったら気軽に質問してください。