phpのmb_send_mailが迷惑メールになる

このQ&Aのポイント
  • PHP初心者の私が作成した顧客へのメール送信フォームからのメールが迷惑メールとして扱われてしまいます。今回はGmailを始めとする複数のメーラーでのSPAM扱いや未達状態が発生し、手間を省くつもりが逆に手間がかかってしまっています。
  • フォームからのメールには自動生成されたリンクURLが含まれており、そのURLがメール本文に表示されています。このことがメールの迷惑判定の基準になっている可能性があります。
  • 解決策として、PHPでの対策を検討しています。また、Apacheサーバーにメールサーバーを追加する方法も一考ですが、正確な手順や設定がわからないため、まずは質問してみたいと思います。
回答を見る
  • ベストアンサー

phpのmb_send_mailが迷惑メールになる

PHPほぼ初心者です。 自分なりに色々試行錯誤し顧客へのメール送信フォームを作成しました。 (PHPなのでもちろんブラウザで動きますが) 事務的な処理を効率化するために作ったのですが、 このフォームから顧客(不特定の人たち)へメールを送信(phpでmb_send_mail使用) しても迷惑メールに届いてしまい重要な内容のメールが先方に通知できず困っています。 当方の環境ですが (1)さくらインターネットのレンタルサーバー(スタンダード) (2)送信元は当社のアドレス (3)また自動生成したリンクURL(さくらの共有SSLのアドレス)がメールの本文中にあります ( https://secure***・sakura・ne・jp/******/****・php?id=*******&email=****%40hotmail・com&lang=EN のような感じです) 主に相手方がGmailの場合はじかれることが多いのですが、 いくつかの海外の企業さんのメーラーでもSPAM扱いされていました。 最近もしかしたらGmailのほうでJunkメールの基準が強化されたのかどうかわかりませんが 未達の為と思われる事案が多数発生し、手間を省く為のものが逆に余計手間がかかって いるということに陥って困っています。 上記の(3)があるためPHP(私がPHPしか使えないので)での解決方法がいいのですが その他の方法でもかまいません。(トライします) また当方ローカル環境にApacheサーバーをたてているのでこちらにメールサーバーを 追加するという方法もありかと思っていますが、やったことが無いのでやり方を間違えれば また同じ症状が出ると思いますので、まずは質問しました。 宜しくお願いします。

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

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

メールサーバーをきちんと立てる技術がないなら PEAR:Mailなどを利用して、契約しているISPの不正のないアカウントで メールを処理してみてください

参考URL:
http://pear.php.net/manual/ja/package.mail.mail.php
taro0714
質問者

お礼

アドバイスありがとうございます。 ローカルサーバのPEARでということですよね? さくらのほうではなくて? 欲を言えばISPのアドレスではなくて自社のアドレスで何とかしたいのですが その際のベストなやり方はどうすればいいのでしょうか?

taro0714
質問者

補足

PEARでやる前にmb_send_mailの設定をしっかり見直したところ headerの部分で変な処理をしていたので、そこを修正しトライしてみたところ 無事Gmailでもinboxに入ってきました。 どうもこの部分で不正なアドレスからのメールだと判断されていたようです。 今回は本当にありがとうございました。

関連するQ&A

  • (PHP初学者) mb_send_mail

    フォームに入力された内容をローカル環境(Xampp)から フリーメールアドレスに送信をする課題を勉強をしています。 入力側ファイル ---------------------------------------------- <html> <body> <form action="mail.php" method="post"> 名前</th><td><input type="text" name="name"><br> メール</th><td><input type="text" name="mail"><br> メッセージ</th><td><textarea name="messe"></textarea><br> <input type="submit" value="確認する" name="submit"> </body> </html> ---------------------------------------------- 送信ファイル(mail.php) ---------------------------------------------- <?php error_reporting(1); $name = $_POST["names"]; $mail = $_POST["email"]; $messe = $_POST["messe"]; mb_language("ja"); mb_internal_encoding("euc-jp"); $naiyou = $names."<br/>".$mail."<br />".$messe; $result = mb_send_mail("○○○@yahoo.co.jp","メール送信テスト",$naiyou); //受信するフリーメールアドレス if($result){echo "成功"; }else{echo "失敗";} ?> ---------------------------------------------- このサンプルと別のサンプルで試して どちらも結果は「成功」と表示されるのですが 実際にはフリーメール側でのメールの受信はできません。 (ホットメールとヤフーメールで試しています。) PHP学習サイトで「php.ini」の設定を変えなければならないということで 以下の部分のセミコロンをはずし変更してみました。 [mail function] SMTP = ○○○(ここには契約プロバイダのsmtpサーバを記入) smtp_port = 25 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 多くのPHPを勉強している方がここでつまずいているようで 色々調べてみたのですが 上手くいかない原因はそれぞれ異なるようで 上手くいく手がかりが見つかっていません。 難しいことはまだ理解できないため できるだけ難しい関数や処理などは使わない方法で 解決できる手段があれば ご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP でmb_send_mailが上手くいかない

    PHP初心者です。現在、自分のパソコンにXAMPPをインストールして、 Apacheを起動し、PHPのサンプルを勉強しいています。 mb_send_mail自体はTRUEで返ってくるのに、メーラーには何も届きません。 書籍やネットにあったサプルをいろいろ調べたのですが、 みな、同じ現象です。 php.iniの設定は下記の通りです。(phpは5.4.7) [mail function] ; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury SMTP = localhost smtp_port = 587  <----25にしても変わりませんでした。 ; For Win32 only. http://php.net/sendmail-from sendmail_from = postmaster@localhost PHPのソース <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); if (mb_send_mail("cy0***@md.point.ne.jp", "テストメール", "これはテストです。", "From: chibikind***@yahoo.co.jp")) { echo "メールが送信されました。"; } else { echo "メールの送信に失敗しました。"; } ?>

    • 締切済み
    • PHP
  • mb_send_mail()に関しまして

    初めて投稿させて頂きます。 PHPを触り始めて間もない者ですが、よろしくお願い致します。 現在、PHPの勉強を兼ねまして空メールを送るプログラムを作成しております。 フォームにボタンを1つ設け、そのボタンを押下すると指定のあて先に空メールを送るという簡単なものです。 【html内のボタンの設定】 <form name="top" method="post" action="a.php"> <input type="submit" value="空メールを送る"/> </form> 【a.php(正しく送れたかを知るためにメッセージを表示するようにしてあります)】 <html> <head> PHPメールテスト送信 </head> <body> <? $address = '送信先メールアドレス'; $subject = ''; $message = 'PHPからのテストメール'; $header = "Content-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header))←エラー行 { print("送信成功!!"); } else { print("エラー:送信失敗!!"); } ?> </body> </html> このプログラムを実行すると以下のエラーが発生します。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\xampp\htdocs\top.php on line 15 参考書を見ながらプログラムを作成したのですが、記述、もしくは設定が関係しているのでしょうか。 分かる方には非常にくだらないことかもしれませんが、ご教授お願い致します。

    • 締切済み
    • PHP
  • mb_send_mail について

     お世話になります。 Linux1.3 + Qmail の構成のメールサーバーとApache1.3+php4の Webサーバーのphp からmb_send_mail関数でメールを飛ばしても受信できません(エラーも出ません) yahooメールなど他のところへは問題なく飛ばせるのですが 同じネットワーク内のドメインに対してはメールが出せない状態です。 メールソフトからの送信では問題ありません。 何か解決法はありますでしょうか?

    • 締切済み
    • PHP
  • mb_send_mailについて

    こんにちは。現在phpの勉強中で、まだローカルテスト環境でしか動かしたことのない者です。今回もローカルテスト環境なんですが、いずれアンケートフォームのようなものを作りたくて、ある書籍を参考に、自分宛にメールを送ろうとしました。 コードの内容は、最初に表示する画面の「mail_input.php」が、 <html> <head> <title>メール送信</title> </head> <body> <h1 style="background:#cccccc"> メール送信</h1> <form method="POST" action="sendmail.php"> <input type="hidden" name="_email" value="ここに自分のメールアドレスを入れました" /> <input type="hidden" name="_subject" value="自分宛てメール" /> <input type="hidden" name="_result" value="<?php print($_SERVER['PHP_SELF']);?>" /> <table border="0"> <tr> <th align="right">名前:</th> <td><input type="text" name="name" size="20" maxlength="30" /></td> </tr><tr> <th align="right">E-Mail:</th> <td><input type="text" name="_from" size="50" maxlength="255" /></td> </tr><tr> <th align="right" valign="top">自由記入欄:</th> <td><textarea name="memo" cols="50" rows="5"></textarea></td> </tr> </table> <input type="submit" value="送信" /> <input type="reset" value="クリア" /> </form> </body> </html> で、メールを送るプログラムの「sendmail.php」が、 <?php $header_info="From: ".$_POST['_from']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.="[".$key."]".$value."\r\n"; } } $kekka=mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info); if($kekka){ header("Location: ".$_POST['_result']); } else{ print "送信失敗"; } ?> です(どちらも文字コードはUTF-8で改行コードはLFです)。 これを動かしたら、 Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 451 See http://pobox.com/~djb/docs/smtplf.html. in C:\xampp\htdocs\Mysite\lesson\php10\day04-1\sendmail.php on line 9 送信失敗 と表示され、メールも受信できませんでした。 php.iniの内容は、 [mail function] ; For Win32 only. SMTP = smtp.eonet.ne.jp smtp_port = 25 ; For Win32 only. sendmail_from = ここに自分のメールアドレスをいれました ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t" で、windowsメールのツールメニューのアカウント→プロパティ→サーバーのところの送信メール(SMTP)(U)のところは、smtp.eonet.ne.jpになっています。送信メールサーバーのところは、「このサーバーは認証が必要」にチェックを入れています。詳細設定の、サーバーのポート番号のことろの、送信メール(SMTP)(O)のところは25にしています。 こちらの環境は、windows vista、xampp1.6.5、php5.2.5で、メールソフトはwindows mailです。加入しているプロバイダはeonet(イオネット)です。コードはサンプルコードをちょっと変えた程度のものなので、たぶんphp.iniの設定やwindowsメールの設定が悪いのだろうと思い、windowsメールの設定のことをイオネットに問い合わせたところ、phpとかそういったことへの質問は対応しかねますとのことでした(対応した方はphpという単語自体を知りませんでした)。 php.iniの[mail function]のところで、 ; For Win32 only. SMTP = smtp.eonet.ne.jp smtp_port = 587 にして、windowsメールの詳細設定の、サーバーのポート番号のことろの、送信メール(SMTP)(O)のところを587にしたり、その他いろいろやってみましたが、ダメでした。ただメールを自分宛に送るだけなので、おそらくとても初歩的なところでつまずいているんでしょうが(考え方が根本的にズレてるような気もします)、解決方法が見つかりません。どなたかアドバイスいただけませんか。イオネットの方だと非常にありがたいです。

    • ベストアンサー
    • PHP
  • PHP mb_send_mail関数 の文字化け

    ホームページ作製の祭にmb_send_mail関数を使ってmailフォームを作ったのですが、送信はされているのですが、mailフォームのアドレスを記入するところにひらがなやデタラメなアドレスを入れると、Outlook で受信すると送信者覧の所だけ、文字化けします。 (きちんと半角英数で○○@○○と入力すると文字化けせずに表示されます。) メール本文に表示されているデタラメなアドレスはそのまま表示されるのですが... なぜでしょうか?? PHPの設定が原因かoutlookが原因か、サーバーの問題なのか... サーバーは「さくらインターネットサーバー」です。 PHPはバージョン 5.2.10 php.iniの設定↓ bstring.language = Japanese mbstring.internal_encoding = euc-jp mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 mbstring.strict_detection = Off mbstring.http_output_conv_mimetype= mbstring.script_encoding= SMTP = ○○.sakura.ne.jp sendmail_from = ○○@○○.jp smtp_port = 25 mail.add_x_header = Off 送信ページはeuc-jpで作ってます。 送信ページのphp↓ <?php // メール送信先 $to = "○○@○○.jp"; if ($_SERVER["REQUEST_METHOD"] == "POST") { foreach($_POST as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } $v = htmlspecialchars($v); $$k = $v; } } else { exit(); } $naiyou = "お名前:$name\n メールアドレス:$from\n タイトル:$title\n 内容:$naiyou\n"; if ($name != "" and $from != "" and $title != "" and $naiyou != "" ) { if (mb_send_mail($to, $title, $naiyou, "From:$from")) { echo "<br />メールを送信しました。"; } else { echo "<br />メール送信失敗です。"; } } ?>

    • ベストアンサー
    • PHP
  • メールフォーム(mb_send_mail)が送信されません。

    mb_send_mailを使ったメールフォームで分からないことが御座いますのでどなたかご教授下さい。 HTMLで入力させた宛先のアドレスにサイトのアドレスを紹介する為に使用するメールフォームです。 以下のソース部の$mlto = 'hoge@hoge.jp';の部分を HTMLより引き継いできた$adにメールを送信したい (イメージ的には $mlto = $ad;) のですが、うまくいきません。 シングルクオテーションが無いからなのか、送信できません。 ちなみに、 $mlto = 'hoge@hoge.jp';のように すれば、普通に送信できます。 どなたかご回答宜しくお願い致します。 PHP4のLINUXのレンタルサーバです。 ソースは以下の通りです。 <?php $ad=$_POST['add']; $mlfr = 'hogehoge@hogehoge.jp'; $mlto = 'hoge@hoge.jp'; $mlsb = 'タイトル'; $mlms = 'サイトのアドレス'; $jcph = '.'; mb_send_mail($mlto, $mlsb, $mlms, $mlfr); header("Location: ok.html"); ?>

    • ベストアンサー
    • PHP
  • PHP mb_send_mail メール送信 550エラー

    PHP mb_send_mail メール送信 550エラー お世話になります。 PHPにてmb_send_mail関数を使い、メール送信を行っているのですが・・・ 特定の送信先に対して以下のメールが帰ってきます。 ※相手先メールアドレスは伏せております。 件名:Returned mail: see transcript for details The original message was received at Mon, 29 Mar 2010 18:14:56 +0900 (JST) from localhost [127.0.0.1] ----- The following addresses had permanent fatal errors ----- <***@***.***> (reason: 550 Host unknown) ----- Transcript of session follows ----- 550 5.1.2 <***@***.***>... Host unknown (Name server: ***.***.: host not found) 送信先のメールアドレス自体は存在しておりますが、mb_send_mailを使っての送信が失敗します。 また、全てのアドレスで上記のエラーが発生するというわけではないようです。 これを正常に送信させるにはどのようにすればよろしいでしょうか・・? ご回答よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mb_send_mailでhotmailに送れない。

    phpでインターネット上でプログラム処理を行わせ、万が一エラーが発生した場合にmb_send_mailにて携帯とPC(hotmail)にその旨をメール送信するプログラムを作成したのですが、なぜかPC(hotmail)の方にだけメールが届きません。送信はちゃんとされているようですが。もちろん、自身のアドレスをフィルター設定しているわけでもありません。 送り主のアドレスと送り先のアドレスは同じものになっていますが、これは問題ありませんよね。念の為、hotmailのもう1つのアカウントにも送信してみましたが、同じ結果でした。送信は出来たが受信されていない。 melonというソフトをメールサーバーとして使っています。 これは何が原因で、どうやって対処したらよろしいのでしょうか?

    • 締切済み
    • PHP
  • mb_send_mailに関して

    環境:Windows2008 Server R2 64bit/php5.3.22 教えて下さい。 Windows2008 Server R2 64bit 環境にてPHPを動作させ、mb_send_mail()関数を使って メールを送信しようと考えています。 PHPも問題なく動き、mb_send_mail()関数用にphp.ini も以下のようにメンテナンスし、記述も 問題ないかと思われますが、メールの送信ができません。。。 64bitでは何か設定が違うのでしょうか? 教えて頂きたいと思います。 《php.ini》   [mail function]  For Win32 only.          ← 32bit only とわざわざ記述がある為、64bit ではNG?  http://php.net/smtp  SMTP = XXXXXX  http://php.net/smtp-port  smtp_port = 25  For Win32 only.  http://php.net/sendmail-from  sendmail_from = XXX@XXX.co.jp 《記述内容》  <?php  $mailto = "XXX@XXX.co.jp";  $subject = "掲示板";  $content = "新規投稿がありました。 ☆☆☆";  $mailfrom = "From:mail@colcoat.co.jp";  mb_language("ja");  mb_internal_encoding("UTF-8");  if(mb_send_mail($mailto,$subject,$content,$mailfrom)){  }else{   echo "送信できませんでした";  }  ?> よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう