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--

回答の条件
  • URL必須
  • 1人10回まで
  • 登録:2008/07/14 11:33:47
  • 終了:2008/07/14 19:53:29

回答(2件)

id:ele_dir No.1

ele_dir回答回数263ベストアンサー獲得回数202008/07/14 11:54:24

ポイント38pt

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

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

id:uniom

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

環境は以下の通りです。

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);

2008/07/14 12:12:42
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/07/14 11:58:55

ポイント32pt

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

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

id:uniom

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

$attachment->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;

$attachment->disposition = Zend_Mime::DISPOSITION_INLINE;

2008/07/14 12:43:33
  • id:uniom
    $myImage = chunk_split(base64_encode($myImage));
    と書くところが、
    $myImage = chunk_split(base64_decode($myImage));
    となっていました。。。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません