質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

9889閲覧

PHPの入力フォームからメールを送信し、Outlook2013で受信すると無題の添付ファイルが添付されてしまう

daizu

総合スコア18

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/12 10:00

発生している問題・エラーメッセージ

https://gray-code.com/php/make-the-form-vol9/
上記サイトを真似てPHPにてフォームを作り、メールを送信した所、
受信側のメーラーがOutlook2013の場合、本来のメール以外に無題の添付ファイルが添付されてしまいます。

該当のソースコード

a.php メール部分

$from = null; $body = null; $admin_reply_subject = null; $admin_reply_text = null; $returnpath = null; //アドレス $to = "xxx@---.com"; $from = "MIME-Version: 1.0\n"; $from = "Content-Type: multipart/mixed;boundary=\"__BOUNDARY__\"\n"; $from .= "From:".$clean['email']."\n"; $from .= "Reply-To:".$clean['email']."\n"; $returnpath = '-f '.$clean['email']; //件名 $admin_reply_subject = '件名'; //本文 $admin_reply_text = "本文\n\n"; $admin_reply_text .= "名前:".$clean['your_name']."\n"; $admin_reply_text .= "メールアドレス:".$clean['email']."\n"; //テキストメッセージをセット $body = "--__BOUNDARY__\n"; $body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n"; $body .= $admin_reply_text . "\n"; $body .= "--__BOUNDARY__\n"; //ファイルを添付 if( !empty($clean['attachment_file']) )

{
$body .= "Content-Type: application/octet-stream; name="{$clean['attachment_file']}"\n";
$body .= "Content-Disposition: attachment; filename="{$clean['attachment_file']}"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents(FILE_DIR.$clean['attachment_file'])));
$body .= "--BOUNDARY\n";
}

mb_send_mail( $to, $admin_reply_subject, $body, $from);

試したこと

入力フォームの添付ファイルの有無に問わず、Outlook2013でメールを受信した場合、必ず無題の添付ファイルも送信されているようです。
yahooなど別のメールアドレスで受信した場合は、無題の添付ファイルは受信していないようでした。
Outlookの問題なのでしょうか?

補足情報(FW/ツールのバージョンなど)

Windows7
PHP7.2
Outlook2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/12 10:15

コードはマークダウンのcode機能を利用してください
m.ts10806

2018/12/12 12:10

その添付ファイルをテキストエディタなどで開くとどのような内容になっていますでしょうか。
daizu

2018/12/13 03:35

無題の添付ファイルの中身は空でした
guest

回答1

0

ベストアンサー

こっちのを参考にしたほうがいい気がする:
PHPでの日本語対応メール+添付ファイル - Qiita

参考サイトのコードでもそうなんだけど、

php

1$from = "MIME-Version: 1.0\n"; 2$from = "Content-Type: multipart/mixed;boundary=\"BOUNDARY\"\n"; 3$from .= "From:".$clean['email']."\n"; 4$from .= "Reply-To:".$clean['email']."\n"; 5$returnpath = '-f '.$clean['email'];

この部分、$fromに設定したMIME-Versionを潰しているのが気になる。

また、FromやReply-Toなどのヘッダー項目を、
Qiitaの記事では先に出してしまっているのも違う。
ヘッダー項目の順序を調整するだけでも、
敏感な(?)メーラーは挙動が変わるかもしれない。

バウンダリー文字列を短縮しているのもちょっと気になる。
本文や添付ファイルをエンコードしたものがたまたまかぶるということは考えにくいものの、
ユニーク性を保証するためにも乱数を加味したQiitaの記事のサンプルのほうが好ましい。

以上、机上での評価。

投稿2018/12/12 12:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daizu

2018/12/13 05:08

参考urlの形に変えると、Outlookで受信しても無題の添付ファイルは添付されませんでした。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問