マルチパート(HTML&添付ファイル)のメールをPHPのMail関数で送信

このQ&Aのポイント
  • マルチパートメールの送信で添付ファイルが表示されない問題について
  • PHPのMail関数を使用してマルチパートメールを送信しようとしていますが、添付ファイルが正しく表示されません。
  • 問題の原因と解決策を教えてください。
回答を見る
  • ベストアンサー

マルチパート(HTML&添付ファイル)のメールをPHPのMail関数で送信

マルチパート(HTML&添付ファイル)のメールをPHPのMail関数で送信しようとしていますが、うまくいきません。(事情によりPear::Mailなどのモジュールは利用できません) 送信されるメールにHTMLパートは表示されますが、添付ファイルが添付されていません。 結果として出力されるメールの内容は以下になります。何が問題なのかわかる方、教えていただけませんでしょうか? MIME-Version: 1.0 Content-type: multipart/mixed; boundary="3996eb6097780a7fcf8f000c0434507f" From: xxxxx@xxxxx.xxx Return-Path: xxxxx@xxxxx.xxx Return-Receipt-To: xxxxx@xxxxx.xxx Reply-To: xxxxx@xxxxx.xxx --3996eb6097780a7fcf8f000c0434507f Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: 7bit <b>Hi, this is a text message part of multipart e-mail (HTML format)</b>. <br> ------------------------------------------------------------<br> <br> Signiture<br> --3996eb6097780a7fcf8f000c0434507f Content-Type: application/octet-stream; name="Blue hills.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Blue hills.jpg" /9j/4AAQSkZJRgABAgEBLAEsAAD/7QlMUGhvdG9zaG9wIDMuMAA4QklNA+0KUmVzb2x1dGlvbgAA AAAQASwAAAABAAEBLAAAAAEAAThCSU0EDRhGWCBHbG9iYWwgTGlnaHRpbmcgQW5nbGUAAAAABAAA --- (添付ファイル部分は長いので中略します) --- XR3iPZMJN1HmsFJJXT6u+3UQdJUJj7lhpJKHV32dh96i3Qx8lhJJK7u9w4jw7p+SCsBJJDukQ7Tu VM6Ln0klHo7rjEeak0rASST0f//Z --3996eb6097780a7fcf8f000c0434507f--

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.1

ここのページのサンプルが参考になりませんか? http://labs.unoh.net/2007/08/php_10.html

stoutontap
質問者

お礼

最初のヘッダに Content-Transfer-Encoding: 7bit が抜けていました。 おかげでうまく動作しました。ありがとうございます。

stoutontap
質問者

補足

このページにあわせてヘッダの順番などを変えてみましたがだめでした。 あと少しのところまで言っていると思うのですが何が問題なのかわかりません。

関連するQ&A

  • HTMLメールを送信するには

    PHPからHTMLメールを送信する際の追加ヘッダーに書くべき内容について教えてください。 $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; multipart/alternative; charset=Shift_JIS\r\n"; mail($to, $subject, $message, $headers); として発信してますが 一部の受信側でTXTに化けてしまいます。 どなたか、HTMLメールの追加ヘッダーの書き方を教えていただきたいのですがよろしくお願いいたします。 5/11 usagi_024

    • 締切済み
    • PHP
  • Perlを使ったCGIでHTMLメールの送信

    Perlを使ったCGIからHTMLメールの送信がしたいです。 そして、そのメール本文に、Formタグのボタンを付けて、そこからCGIのページを開きたいです。 メール送信はできていて、受信した時にHTML形式のメールになっているのですが、FormのボタンからさらにCGIを開こうとすると、ページは開いても、Body部分は空の状態のページが開きます。 そのFormの部分は、HTMLのページ上に設置するとそこからは希望通りのページの表示をしてくれます。 メール本文中にFormタグを設置してもうまく動かないのでしょうか。 CGIのメール送信部分は以下です。 my $mailtext =<<"MAILTO_TEXT"; To: aaa@bb.co.jp Cc: From: aaa@bb.co.jp Subject: テストです Content-Transer-Encording: 7bit Content-Type: text/html; charset=ISO-2022-JP テストです。<Br><BR> 下のボタンを押してご確認ください。<br><br> <form name="mst" method="post" action="aaaaaa.cgi" enctype="multipart/form-data"> <input name="submit" type="submit" value="詳細"></form> MAILTO_TEXT open(MAIL,"| $sendmail -f $mailto -t") ; print MAIL $mailtext; close (MAIL); おかしい部分、足りない部分などありましたら教えて下さい。 どうぞよろしくお願いいたします。

  • 本文に入って表示されてしまった添付ファイルを取り出すには?

    添付ファイル付きのメールを友人に送ったのですが、大きすぎるということで、メールサーバーから戻ってきてしまいました。 実は、作成したファイルはHDDの故障ですでに手元になく、なんとかメールから取り出せたらと考えています。 サーバーから戻ったメールは、添付ファイルではなく、本文のあとに、文字列として以下のように表示されています。 --------_41E7706B5CAE04C6C218_MULTIPART_MIXED_ Content-Type: application/octet-stream; (一部略) 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAACAAAAygAAAAAAAAAA EAAAzAAAAAEAAAD+////AAAAAMgAAADJAAAA//////////////////////////////////////// AAAAAAAAAAAAAAAAAAAAAAAAAAAA (一部略) --------_41E7706B5CAE04C6C218_MULTIPART_MIXED_-- メール本文から、添付ファイルを取り出す方法はあるでしょうか。 ちなみに、サーバーから戻されたメールは、becky!やoutlook expressなど、メールソフトを変えても添付ファイルとして分離できませんでした。 添付の部分を取り出す方法を教えていただけるとありがたいです。

  • メールに添付したHTMLファイルが開けない

    作成したHTMLファイルをメールに添付して、AさんとBさんへ送りました。 Aさんは読み取れましたが、Bさんは添付のエラーメッセージが出て見ることができませんでした。 Bさんは、メッセージに添ってコントロールパネルのどこから入って、どれを直せばよろしいのでしょうか。 具体的にお教え下さい。 なおエラーメッセージの内容は次のとおりです。 「指定されたファィルに対してこの動作を行うプログラムが関連付けられていません。コントロールパネルの「関連付けを設定する」でプログラムを関連付けてください。」 なお、AさんはW7で、BさんはVista。いずれもWindows Live メールで受信しているはずです。 よろしくお願いいたします。

  • PHP Windows版のmail()を使用して添付ファイルを送りたい

    はじめて、質問させていただきます。 環境はWindowsXP(Pro)+IIS+PHPです。 PHPのmail()関数を使用して、添付ファイルをメールで送信したいと考えております。 mail("-----@co.jp",$subject,$msg,$headers);を実行します。 $headersは、追加ヘッダということになっています。 $boundary="-*-*-*-*-*-*-*-*-*-Boundary_".uniqid("b"); とセットし、 $headersには、 $headers=Content-Type:multipart/mixed; $headers.=boundary=$boundary; として、実行します。 送られてきたメールのヘッダの内容を確認すると 「Content-Type」が、 Content-Type:text/plain; となってしまいます。 mail()関数のヘッダの指定方法は、これでいいのでしょうか? 実際のコードは、メッセージ部分などいろいろ書き込んでいます。いろいろ書き換えて実験してみましたが、どうも、この問題をクリアできないと添付ファイルメールを送信することができないようです。 ご存知の方があれば、教えていただきたいです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PEARのmimedecode.phpでiphoneの添付データが受け

    PEARのmimedecode.phpでiphoneの添付データが受け取れません。 お世話になります。 いま携帯電話からメールに動画データを添付して、投稿用アドレスにメール送信すると、サーバーがメールの受信をトリガーとして、添付データを抜き出して保存するスクリプトをPHPで作っています。メールの解析にPEARのMimeDecodeを使用しています。Docomo、au、Softbank(iphone以外)からは正常に添付データを取得できるのですが、iphoneからのみ取得できません。 iphoneからのメールは以下の通りです。 送信元:hogehoge@softbank.ne.jp 投稿先:toukou@mailserver.co.jp 添付データ:IMG_0001.3gp //---ここからメールの情報 Return-Path: <hogehoge@softbank.ne.jp> Delivered-To: Received: (qmail 11046 invoked from network); 6 May 2010 14:21:16 +0900 Received: from unknown (HELO fw.mailserver.co.jp) (202.216.xx.xx) by www.mailserver.co.jp with SMTP; 6 May 2010 14:21:16 +0900 Received: from server.softbank.ne.jp ([202.179.204.xxx]:38700) by fw.mailserver.co.jp.co.jp with smtp (Exim 4.69) (envelope-from <hogehoge@softbank.ne.jp>) id 000000-000000-00 for toukou@mailserver.co.jp; Thu, 06 May 2010 14:36:39 +0900 Subject: =?ISO-2022-JP?B?SVBob25lGyRCRjAyaEF3SVUbKEI=?= Content-Type:multipart/mixed; boundary="MMSPart_001_39442822_7893_4738_b75f_f3073dc3b55c" From: =?ISO-2022-JP?B?GyRCPi48RhsoQiAbJEJNNTtKGyhC?= <hogehoge@softbank.ne.jp> Date: Thu, 06 May 2010 14:36:35 +0900 Message-ID: <20100506143635519275.1818@0016E68C3670> To: toukou@mailserver.co.jp Sender:hogehoge@softbank.ne.jp Mime-Version:1.0 --MMSPart_001_39442822_7893_4738_b75f_f3073dc3b55c Content-Type:text/plain;charset=ISO-2022-JP Content-Transfer-Encoding:7bit (ここに本文) --MMSPart_001_39442822_7893_4738_b75f_f3073dc3b55c Content-Disposition:Attachment;filename=IMG_0001.3gp Content-Location:IMG_0001.3gp Content-Type:video/3gpp;name=IMG_0001.3gp Content-Transfer-Encoding:base64 (添付ファイルのデータ) //---ここまでメールの情報 他のsoftbank機からは正常に動いていますので、なにかiphone独特のものがあるのでしょうか? メールの事について知識がなく困っています。iphoneのメールに関して、何かヒントになるような情報をお持ちの方がいらっしゃいましたら、ご教示くださいませんでしょうか? よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PerlにおいてPOP3経由でメールを受信する方法。添付ファイル

    http://digit.que.ne.jp/work/index.cgi?Perl%A5%E1%A5%E2%2FPerl%A4%C7%A5%E1%A1%BC%A5%EB%A4%F2%BC%F5%A4%B1%A4%EB を参考にしてメールを受信するプログラムをつくってみました。 しかし、添付ファイルを別に保存する方法がわかりません。 (http://digit.que.ne.jp/work/index.cgi?Perl%A5%E1%A5%E2%2FPerl%A4%C7%A5%E1%A1%BC%A5%EB%A4%F2%BC%F5%A4%B1%A4%EB より) if (open(OUT, ">$outfile")) { print OUT @{$message}; close OUT; } のところで @{$message} を操作すれば、本文や添付ファイルを別々に保存することができるとおもうのですが、やり方がわかりません。MIME::Parserを使えばよいという情報がありましたが、日本語ファイル名で不具合があるなどという情報も見受けられます。 実際レンタルサーバにおくのでMIMI::Parserも使えるかどうか微妙です。 添付ファイルと本文を別々に保存する方法が分かる方がおられましたら、ご教授お願いします。

    • ベストアンサー
    • Perl
  • HTMLのメールリンクに添付ファイルをつける

    ログ検索を行いましたが、思ったものが見つけられないため、質問させてください。 HTMLでメールリンクを貼り、メーラーが立ち上がるようにしていますが、<a href="mailto:~">~</a> この立ち上がってきたメール作成画面に、予め添付画像を付けたいのです。 ちなみに、meilto:~の~の部分は空白にし、利用者が入力できる形にしたいです。 この~を「お友達に送る」という感覚です。 ネットで調べ、 <a href="mailto:? attach=添付ファイルのURL"> などやってみたのですが、うまくいきません。 どなたかご教授いただけないでしょうか。 よろしくお願いします。

  • 送信後英語のメールが届きます。

    今家に家庭用と仕事用でパソコンが2台あります。 家庭用から仕事用にエクセルを添付したメールを送信すると以下のメールが届きます。 件名:Mail Delivery Failure 本文:X-UIDL: 799097907982505F84ZX55365F9998907 Delivery of email to this address "仕事用アドレス" failed due to an unknown mailbox. The first 50 lines of your original message follow:> Received: from rcpt-expgw.biglobe.ne.jp (133.205.19.68) > by mail30d.wh2.ocn.ne.jp (RS ver 1.0.95vs) with SMTP id 0-0327758268 > for <仕事用アドレス>; Mon, 9 Feb 2009 20:17:48 +0900 (JST) > Received: from vc-gw.biglobe.ne.jp > by rcpt-expgw.biglobe.ne.jp (kbkr/0208160408) with SMTP id n19BHm4x019752 > for <仕事アドレス>; Mon, 9 Feb 2009 20:17:48 +0900 > Received: from smtp-gw.biglobe.ne.jp ([172.21.175.156]) > by vc-gw.biglobe.ne.jp (kbkr/0716090908) with ESMTP id n19BHmCO026120 > for <仕事用アドレス>; Mon, 9 Feb 2009 20:17:48 +0900 > X-Biglobe-Sender: <家庭用アドレス> > Received: from USERPC (119.242.27.75 [119.242.27.75]) by smtp-gw.biglobe.ne.jp > id UCBFAC15AFDC; Mon, 09 Feb 2009 20:17:48 +0900 (JST) > Message-ID: <DC4B2062AA8C4096805966B98B1AB11B@USERPC> > From: "matsumoto" <家庭用アドレス> > To: <仕事用アドレス> > Subject: > Date: Mon, 9 Feb 2009 20:17:13 +0900 > MIME-Version: 1.0 > Content-Type: multipart/mixed; > boundary="----=_NextPart_000_0005_01C98AF3.652F3B50" > X-Priority: 3 > X-MSMail-Priority: Normal > X-Mailer: Microsoft Windows Mail 6.0.6001.18000 > X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6001.18049 > X-SF-Loop: 1 > > This is a multi-part message in MIME format. > > ------=_NextPart_000_0005_01C98AF3.652F3B50 > Content-Type: multipart/alternative; > boundary="----=_NextPart_001_0006_01C98AF3.652F3B50" > > > ------=_NextPart_001_0006_01C98AF3.652F3B50 > Content-Type: text/plain; > charset="iso-2022-jp" > Content-Transfer-Encoding: quoted-printable > > > ------=_NextPart_001_0006_01C98AF3.652F3B50 > Content-Type: text/html; > charset="iso-2022-jp" > Content-Transfer-Encoding: quoted-printable > > <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> > <HTML><HEAD> > <META http-equiv=3DContent-Type content=3D"text/html; = > charset=3Diso-2022-jp"> > <META content=3D"MSHTML 6.00.6001.18183" name=3DGENERATOR> > <STYLE></STYLE> 以上です。 受信はするのですが添付されたエクセルが見れないです。 どうぞよろしくお願いします。

  • PHPメール送信画面(メールフォーム)

    こんにちは!PHPの勉強している学生です。 皆さん、お忙しいところ恐縮ですが、2つのファイル(下記のform.htmlとsend.php)でメール送信画面(メールフォーム)を作っています。大元はググって、無料ソースをコピーして、無料レンタルサーバーの@pageにFFFTP送信して確認致しました。 (1) 結果、送信ボタンを押した後、「メールが送信されました。」と表示はされるのですが、実際にはメールが送られてきません。ちなみに、test@mopera.netの部分に、NTTドコモで契約している自分のメールアドレスを入れました。お恥ずかしながら、A,無料サーバー側の問題なのか?、B,ドコモの設定の問題なのか?、C,メールフォームの問題なのか?分かりません。 ここに関しては、原因やソースコードをご教授頂ければ幸いです。 (2) またPHPのメールフォームでは、そもそもどの様な仕組みでメールが送られるのかが分かりません。 つまり、サーバーでメールを送っているにしても、受信のメールアドレスは何になるのでしょうか? メールフォームで入力した、メールアドレスから送られるのでしょうか? 素人なので検討がつきませんが、より良いソースコード等がありましたらお知らせ下さいませ。 どうぞ宜しくお願い致します。 ■form.html■ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <form action="send.php" method="post"> 件名(タイトル):<br /> <input type="text" name="subject" size="30" value="" /><br /> 送信者名:<br /> <input type="text" name="name" size="30" value="" /><br /> メールアドレス:<br /> <input type="text" name="mail" size="30" value="" /><br /> 本文:<br /> <textarea name="message" cols="30" rows="5"></textarea><br /> <br /> <input type="submit" value="送信する" /> </form> </body> </html> ■send.php■ <?php $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("test@mopera.net", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("error"); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p>メールが送信されました。</p> <p><a href="top.html">戻る</a></p> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう