今回は、airxmailを使って受信したメールから添付ファイルを取り出す方法です。

メールを受信する方法は、こちらを参照してください。

さて、ここでは、実際にメールを受信したハンドラの部分だけを見ていきます。

private	function messageHandler(e:POP3MessageEvent):void{
	var msg:MimeMessage = e.getMimeMessage();
	//  ここでメッセージに添付された子パートの一覧を取得する
	var attaches:Array = msg.attachmentChildren;
	if(attaches.length > 0){
		for each(var attach:MimeBodyPart in attaches){
			if(attach is MimeBinaryPart){
				var binPart:MimeBinaryPart = attach as MimeImagePart;
				var bytes:ByteArray = attach.bodyByteArray;

				//  v0.6 もしくは r69 以前では getHeader("Content-Disposition"); を使う(バグのため)
				var contentDisposition:MimeHeader = binPart.contentDisposition;

				if(contentDisposition){
					var filename:String = contentDisposition.getParameter("filename");
					filename = MimeUtils.decodeMimeHeader(filename);
					log.debug("Filename => " + filename );

					var file:File =	File.desktopDirectory.resolvePath(filename);
					var fs:FileStream = new	FileStream();
					fs.open(file,FileMode.APPEND);
					fs.writeBytes(bytes);
					fs.close();
				}
			}
		}
	}
}

となります。
ここでは、あくまでも例なので、デスクトップに保存しています。

関連記事

4 Responses to “airxmail: 受信したメールから添付ファイルを取り出すには”

  • のぶ より:

    airxmailを使わせていただいております。

    Gmailになります。
    なんとかメールは、受信できるようになったのですが
    connect関連のエラー処理と
    添付ファイルの取り出しに苦戦してます(^_^;)

    添付ファイルを取り出すサンプルで動作させようとしているのですが、

    for each(var attach:MimeBodyPart in attaches){
    のあとの
    if(attach is MimeBinaryPart){
    での
    attachの内容が、MimeBodyPartの為
    以下の処理が実行されることなく終了してしまいます。
    Gmailだとなにか違うのでしょうか?
    お手数ですが、ヒントをいただければ助かるのですが
    よろしくお願いします。

  • coltware より:

    airxmailを使ってもらってありがとうございます。
    gmailだと違うというか、受信しているメール1通1通で構造も違うので何ともいえないのですが、開いているメールの構造(メールのソース)を調べながら中身をみていくしか方法がありません。

    ただ、添付ファイルの一覧が欲しいだけならば、
    MimeMessage.attachmentChildren()
    というgetterがありますので、そちらを使うと便利だと思います。
    ちなみに、Arrayとして、MimeBinaryPartのオブジェクトがかえってきます。

    こちらでどうでしょうか?
    どうしてこのようなメソッドがあるかというと、
    たまに、Multipartの中にさらにMultipartがあって、
    そこに添付ファイルがあるメールがある場合があります。
    これだと、さらに深くたどっていく必要があるのでそのようにしました。
    ただし、こちらに入ってくるデータはcontentDispositionがattachmentのパートのみです。
    まず、いわゆる添付ファイルというものはこれで大丈夫だと思いますが、
    HTMLメールなどと一緒についてくる画像などはこれでとれないとは思います。
    (この辺りの記憶は100%ではないので、すいません)

  • のぶ より:

    早速おレスありがとうございます。
    まとを得ない質問で申し訳ありません。

    MimeMessage.attachmentChildren()は、上記にメールから
    添付ファイルを取り出す方法で記載されてるものですよね。
    使わせていただいているのですが….
    3種類のファイルを添付したところ

    for each(var attach:MimeBodyPart in attaches){
    後のattachの内容が
    1.画像:MimeImagePart
    2.テキスト:MimeTextPart
    3.エクセル等:MimeBodyPart
    になっている事を確認しました。
    実際取得したいのは、3番になるのですが

    for each(var attach:MimeBodyPart in attaches){

    実際の添付メールの内容
    attachの内容をみると

    attach
    L _hederkeys (object)
         L content-disposison (MimeHeader)
    L _params (object)
    L filename (”Book.Xls”)

    という形になっていることは、分かりました。
    ただここから上記のサンプルを使っての方法が
    なかなか苦戦しております(;´∀`)

    contentDispositionに対しての設定だけと思うのですが….

    var filename:String = contentDisposition.getParameter(“filename”);
    filename = MimeUtils.decodeMimeHeader(filename);
    var file:File = File.desktopDirectory.resolvePath(filename);
    以下省略

    よろしくお願いします。

  • coltware より:

    返事が遅れてすいません。

    >MimeMessage.attachmentChildren()は、上記にメールから
    >添付ファイルを取り出す方法で記載されてるものですよね。

    そうですね。
    自分が書いたものですが、多少勘違いして、
    前回、重複して同じようなことを書いてしまいました。
    (かれこれ1年前の内容だったりするので、勘違いしてしまいました。すいません)

    ただ、ほとんど、うまくいっているように見えるのですが、
    具体的にどこか、はまっているところがあるのでしょうか?

    よろしくお願いします

Leave a Reply

Spam protection by WP Captcha-Free

ソフトウェア&ライブラリ



ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2010年11月
« 10月   12月 »
1234567
891011121314
15161718192021
22232425262728
2930  

カスタム検索
RSS
Add to Google
カテゴリ
にほんブログ村 IT技術ブログへ