バージョン選択

フォーラム

メニュー

オンライン状況

37 人のユーザが現在オンラインです。 (29 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 37
もっと...

サイト内検索

質問 > フロント機能 > 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様のますますのご発展をお祈りしております。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,967名です
総投稿数は110,019件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.