質問 > フロント機能 > 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
yassy |
投稿日時: 2013/10/11 17:14
対応状況: −−−
|
半人前 登録日: 2011/8/17 居住地: 投稿: 24 |
2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして お忙しいところ恐縮ですが、1つご教示いただけると助かります。
注文メールなどの送信メールが、GoogleやYahooなどのフリーメールの場合に迷惑フォルダに 入ってしまうということがございます。それを回避する方法を調べていましたら、 「/data/module/Mail/mail.php」を少し修正をすると回避できるという記事をいくつか確認 をいたしまして、修正をしてみようと思っております。その方法でございますが、下記の2通 りが見つかったのですが、どちらが正しいのでしょうか。 【方法?】 if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } else { $result = mail($recipients, $subject, $body, $text_headers,$this->_params); } を $parameter = "-f" . $headers['Return-Path']; if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } else { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } に変更 【方法?】 if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } else { $result = mail($recipients, $subject, $body, $text_headers,$this->_params); } を $this->_params = "-f" . $headers['Return-Path']; if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } else { $result = mail($recipients, $subject, $body, $text_headers, $this->_params); } に変更。 両者ともに同じ箇所の修正なのですが、修正内容が少しだけ異なっております。プログラミ ングが分からずに、両者の違いやどちらが正しいのかを理解できておりません。お忙しいと ころ申し訳ございませんが、ご助言をいただけると助かります。何卒どうぞよろしくお願い します。 ----------------------------------------------------------- [EC-CUBE]2.11.5 [OS]Linux [データベース]MySQL [WEBサーバ]Apache ----------------------------------------------------------- |
gunung |
投稿日時: 2013/10/12 23:00
対応状況: −−−
|
半人前 登録日: 2013/10/11 居住地: 投稿: 14 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして yassyさん、こんばんは。
EC-CUBEについては素人なので、詳細はほかの方に補足していただくとして、 多少プログラムはわかりますので、わかる範囲でお応えします。 まずこの修正の意味ですが、メールの 「送り主(sender)」と「エラーメール返信先(Return-path)」 を一致させる目的があるようです。 これは一般的に迷惑メールでこの2つの設定が一致していないことが多いためです。おそらくこの2つの値が一致していないことを理由に迷惑メールと判定しているメールサーバーがあるのでしょう。(推測) ただし、この2つの設定が一致しないメールが必ずしも迷惑メールだといえるわけではありませんので、あまりよいフィルタ方法とは言えません。ただ現実にこのようなフィルタをしているサーバーがあるとすれば、対策を取らざるを得ませんね。 ●どちらが正しいか 結論から言うと、どちらでも動作します。 ですが、どちらの修正方法も厳密には元の処理の一部を無視して書き換えてしまっており、あまりよい修正とは言えません。 ●変更後のコード提案 このように書き換えれば元の処理を生かしつつ、目的も達成できるはずです。 ====プログラムはじめ==== $parameter = "-f" . $headers['Return-Path']; if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } else { $result = mail($recipients, $subject, $body, $text_headers, $this->_params . $parameter); } ====プログラム終わり==== ●迷惑メール対策 上記のコード変更だけで迷惑メールと判定されなくなるかはわかりません。 うまくいかない場合、下記のような対策も検討してみて下さい。 smtpサーバが迷惑メールサーバと思われないようにする http://perl.no-tubo.net/2011/06/30/smtp%E3%82%B5%E3%83%BC%E3%83%90%E3%81%8C%E8%BF%B7%E6%83%91%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%A8%E6%80%9D%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB/ ▼▼▼▼▼▼ ここから先はより詳細な説明です ▼▼▼▼▼▼ 大変な長文になってしまいました。 面倒なら読まなくても結構です。 ●変更前の処理概要 変更前の処理を日本語に訳してみます。 わかりやすくするため、厳密ではありません。 ====プログラムはじめ==== if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } else { $result = mail($recipients, $subject, $body, $text_headers,$this->_params); } ====プログラム終わり==== ====日本語訳はじめ==== もし「$this->_paramsが空(何の設定もない)」もしくは「セーフモードの設定がされている」なら 当てはまったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 当てはまらなかったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 追加設定:$this->params 終わり ====日本語訳おわり==== ●方法1変更後の処理概要 ====プログラムはじめ==== $parameter = "-f" . $headers['Return-Path']; if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } else { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } ====プログラムおわり==== ====日本語訳はじめ==== 変数$parameterに 「-f (エラー時の返信メールアドレス)」という文字を入れなさい もし「$this->_paramsが空(何の設定もない)」もしくは「セーフモードの設定がされている」なら 当てはまったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 追加設定:$parameter 当てはまらなかったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 追加設定:$parameters 終わり ====日本語訳おわり==== これでは、条件を付けて処理を分岐した意味がありません。 下記のプログラムと処理結果は同じです。 ====プログラムはじめ==== $parameter = "-f" . $headers['Return-Path']; $result = mail($recipients, $subject, $body, $text_headers, $parameter); ====プログラムおわり==== $this->_params に何も設定が入っていない場合はいいですが、 何か設定されていた場合は、設定した内容を全く無視してメールを送ることになります。 ●方法2変更後の処理概要 ====プログラムはじめ==== $this->_params = "-f" . $headers['Return-Path']; if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } else { $result = mail($recipients, $subject, $body, $text_headers, $this->_params); } ====プログラムおわり==== ====日本語訳はじめ==== $this->_paramsに 「-f (エラー時の返信メールアドレス)」という文字を入れなさい もし「$this->_paramsが空(何の設定もない)」もしくは「セーフモードの設定がされている」なら 当てはまったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 当てはまらなかったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 追加設定:$this->_params 終わり ====日本語訳おわり==== 今度の処理は、条件に当てはまった場合は相変わらず従来と同じ形式のメールが送信されます。 条件に当てはまらなかった場合、「送り主(sender)」と「エラーメール返信先(Return-path)」は一致しますが、もともと$this->_paramsに入っていた設定は上書きされて消えてしまっています。 ●変更後のコード提案 このように処理を書き換えればいいのではないでしょうか? ====プログラムはじめ==== $parameter = "-f" . $headers['Return-Path']; if (empty($this->_params) || ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } else { $result = mail($recipients, $subject, $body, $text_headers, $this->_params . $parameter); } ====プログラムおわり==== ====日本語訳はじめ==== $parameterに 「-f (エラー時の返信メールアドレス)」という文字を入れなさい もし「$this->_paramsが空(何の設定もない)」もしくは「セーフモードの設定がされている」なら 当てはまったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 追加設定:$parameter 当てはまらなかったら、下記の設定でメールを送りなさい 送り主:$recipients 題名:$subject 本文:$body ヘッダー:$header 追加設定:$this->_paramsと$parameterをつなげた文字列 終わり ====日本語訳おわり==== ※参考URL PHP メール送信 http://php.net/manual/ja/function.mail.php Return-path 用語説明 http://www.pi-pe.co.jp/word/i/returnpath.html |
gunung |
投稿日時: 2013/10/12 23:32
対応状況: −−−
|
半人前 登録日: 2013/10/11 居住地: 投稿: 14 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして すみません。追加です。
EC-CUBEではないですが、PHPを使ってメールを送信した時にエラーで戻ってくるという事例がネットに掲載されていました。 やはり今回のプログラムの変更のように、mail()関数の5番目の引数(設定値)に -fmail@example.com のように-f + メールアドレスを設定して問題を回避しているようです。 ※URL メールサーバはメールヘッダを頼りとして配送先を知るのではない http://canalize.jp/archives/007065.php そして、この対策をとるときにはあわせて、 「trusted userを追加する」 対策を施す必要があるようです。 ※URL Trusted Userを追加する http://www.wikihouse.com/1yen/index.php?UNIX%2FSendMail#content_1_16 ページの下から2番目の項目に従ってください。 プログラムやネットワークの知識がある人でないと読み解くのは難しいかもしれません。 作業量自体は大したことはありませんので、理解が難しい場合は専門家に相談してみて下さい。 |
gunung |
投稿日時: 2013/10/12 23:53
対応状況: −−−
|
半人前 登録日: 2013/10/11 居住地: 投稿: 14 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして 度々すみません。
safe_modeの時には、あえてパラメーターを付けていないのを無視して書き換えてしまったことに気づきました。 さきほどのプログラムでも動くと思いますが、こちらの方がベターです。 ====プログラムはじめ==== $parameter = "-f" . $headers['Return-Path']; if (ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } elseif (empty($this->_params)) { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } else { $result = mail($recipients, $subject, $body, $text_headers, $this->_params . $parameter); } ====プログラム終わり==== |
yassy |
投稿日時: 2013/10/13 10:11
対応状況: −−−
|
半人前 登録日: 2011/8/17 居住地: 投稿: 24 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして gunung 様
いつもお世話になっております。 ご返信をいただきまして、誠にありがとうございました。 とても困っておりましたので、非常に助かりました。 概要を確認させていただきましたが、せっかくより詳細なアドバイスをいただきましたので、 詳細を理解してから設定してみたいと思っております。理解を深めるために少しお時間をいた だけますでしょうか。 また設定をしてみましたら、御報告させていただきます。 まずはご返信の御礼まで。どうもありがとうございました。 |
gunung |
投稿日時: 2013/10/14 10:11
対応状況: −−−
|
半人前 登録日: 2013/10/11 居住地: 投稿: 14 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして 返信遅くなりました。
少しでも助けになれたなら、良かったです。 頑張ってください。 わからないことがありましたら、遠慮なくどうぞ。 |
yassy |
投稿日時: 2013/10/15 7:57
対応状況: −−−
|
半人前 登録日: 2011/8/17 居住地: 投稿: 24 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして gunung 様
いつもお世話になっております。 改めましてご返信どうもありがとうございました。いただきました内容を自分なりに理解をさせて いただきまして、EC CUBEへ適用をいたしました。こちらでしばらく様子を見てみようと思います。 お忙しいところどうもありがとうございました。とても勉強になりました。 1点お伺いをさせていただいてもよろしいでしょうか。 今回は下記のように修正をさせていただきました。 ====プログラムはじめ==== $parameter = "-f" . $headers['Return-Path']; if (ini_get('safe_mode')) { $result = mail($recipients, $subject, $body, $text_headers); } elseif (empty($this->_params)) { $result = mail($recipients, $subject, $body, $text_headers, $parameter); } else { $result = mail($recipients, $subject, $body, $text_headers, $this->_params . $parameter); } ====プログラム終わり==== この場合に、mail()関数の5番目の引数(設定値)に -fmail@example.com のように-f + メールアドレスを設定して問題を回避しているということでございました。そしてこの 場合は、併せて「trusted userを追加する」とベターであるということでございました。 現在こちらで利用をしているのは、共有サーバー(エックスサーバー)のメールを使用して、EC CUBE から送信をしております。共有サーバーですので、「trusted userを追加する」ということができない と理解しています。ただ、下記のサイトを読んでおりますと、 http://php.net/manual/ja/function.mail.php 「この方法でエンベロープの sender ヘッダ(-f)を設定する際は、 'X-Warning' ヘッダが付加され ないように Web サーバーの実行ユーザーを sendmail 設定に追加しておく必要があるかもしれません。 sendmail を利用している場合、これは /etc/mail/trusted-users で設定します。」 とございました。プログラムの修正を加えた後に、EC CUBEから送られたメールのヘッダーを確認しま したところ、 ・修正前は、「エラーメール返信先(Return-path)」が「送り主(sender)」と異なるメールアドレスが入 っていたが、修正後は一致していた。 ・ 'X-Warning' ヘッダというものは付加されていなかった 状態でございました。 'X-Warning' ヘッダが付加されていなかったということは、「trusted-users」 の追加は行う必要はなく、現状のままでも問題なさそうという理解で正しいのでしょうか。 お忙しいところ恐縮ですが、何卒どうぞよろしくお願いいたします。 |
gunung |
投稿日時: 2013/10/15 9:43
対応状況: −−−
|
半人前 登録日: 2013/10/11 居住地: 投稿: 14 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして はい、実際のメールにX-Warningヘッダがついていなければ、問題ないと思います。
実際には、 X-Authentication-Warning という表記になるようです。 http://blogs.yahoo.co.jp/elecom1971/23840736.html PHPのマニュアルにも、そのほかの指示にも X-Warningヘッダがつく「かもしれない」と書いてあります。 ついていなければ、問題ないでしょう。 この、X-Warningヘッダがついていると、これまた迷惑メール扱いになるでしょう。 もしついているようであれば、サーバーの運営会社に問い合わせれば何らかの対処をしてくれるかもしれません。試してみて下さい。 |
yassy |
投稿日時: 2013/10/15 14:39
対応状況: −−−
|
半人前 登録日: 2011/8/17 居住地: 投稿: 24 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして gunung 様
いつもお世話になっております。 ご返信ありがとうございました。いただきました内容を確認させていただきました。 今回は本当に勉強になりまして、お忙しいところありがとうございました。 今後とも何卒どうぞよろしくお願いいたします。 |
gunung |
投稿日時: 2013/10/15 15:22
対応状況: −−−
|
半人前 登録日: 2013/10/11 居住地: 投稿: 14 |
Re: 2.11.5 送信メールが迷惑フォルダに入ることを回避する方法につきまして yassy様
お疲れ様でした。 プログラムがわからないというお話でしたが、あれだけの内容を自力で理解されたのはすごいですね。 yassy様の努力の賜物です。 私も勉強になって面白かったです。 yassy様のますますのご発展をお祈りしております。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |