人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

zend_mailで添付ファイルを送信したいのですが、以下のように、添付ファイルが壊れてしまいます。
(添付ファイル部分が極端に短くなってしまい、受信したファイルを開けません。)
添付ファイルが壊れずに正常に送れるようにするにはどうすればよいでしょうか?


This is a message in Mime Format. If you see this, your mail reader does not support this format.

--=_024b9094f645b465e6f5436611e3320f
Content-Type: text/plain; charset="iso-2022-jp"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

test text
--=_024b9094f645b465e6f5436611e3320f
Content-Type: image/gif; name=hoge.gif
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="hoge.gif"

GIF89Q0K
--=_024b9094f645b465e6f5436611e3320f--

●質問者: uniom
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:base64 DOES GIF hoge ISO-2022-JP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ele_dir
●38ポイント

添付はできてるようですので、なんとなく、添付ファイルの読み込み方法が、少しおかしいだけの気もしますが、環境、言語、send mailを扱う部分のスクリプを提示していただいた方が適切なアドバイスができると思います。

http://sonic64.com/2004-10-09.html

◎質問者からの返答

早速のご回答あがとうございます。

環境は以下の通りです。

PHP 5.1.6、CentOS release 4.5、ZendFramework-1.5.1

スクリプト部分は以下の通りです。(一部抜粋)

mb_internal_encoding('UTF-8');

$config = array('auth' => 'login',

'username' => 'hoge@hostname.domain',

'password' => 'xxxx');

$transport = new Zend_Mail_Transport_Smtp('mail.hostname.domain', $config);

$zendMail = new Zend_Mail('iso-2022-jp');

$zendMail->setBodyText(mb_convert_encoding($body, 'ISO-2022-JP', 'UTF-8'));

$zendMail->setDate(date('r'));

$zendMail->setFrom($from, mb_encode_mimeheader($from_name, 'UTF-8', 'B'));

$toAddresses = explode(",", $to_address);

foreach ($toAddresses as $toAddress) {

$tmpTo = Mail_RFC822::parseAddressList($toAddress);

$zendMail->addTo($tmpTo[0]->mailbox.'@'.$tmpTo[0]->host);

}

$zendMail->setSubject(mb_encode_mimeheader($subject, 'UTF-8', 'B'));

$filePath = self::UPLOAD_DIR.basename($file_1);

$fp = fopen($filePath, "r");

$myImage = fread($fp, filesize($filePath));

fclose($fp);

$myImage = chunk_split(base64_decode($myImage));

$attachment = $zendMail->createAttachment($myImage);

$attachment->type = mime_content_type($filePath).'; name='.basename($file_1);

$attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;

$attachment->encoding = Zend_Mime::ENCODING_BASE64;

$attachment->filename = basename($file_1);

$zendMail->send($transport);


2 ● pahoo
●32ポイント

Content-Disposition を inline にしてみてください。

具体的な手順は「ファイルの添付」を参考にしてください。

◎質問者からの返答

下記のように、Content-Dispositionをinlineにしましたが、結果は同じでした。

$attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;

$attachment->disposition = Zend_Mime::DISPOSITION_INLINE;

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ