• 締切済み

PHPのmail()で送れていたメールが、急に受信できなくなりました。

PHPのmail()で送れていたメールが、急に受信できなくなりました。 XP上のFreebsd@Vmwareでメール送信テストをしていて、 数日前まで普通に受信できていたのですが、 同じコードが今は全く動作しません。 エラーも吐かないので原因が全く分かりません。 phpinfo();で関連していそうなところを見ると sendmail_from no value no value sendmail_path /usr/sbin/sendmail -t -i /usr/sbin/sendmail -t -i SMTP localhost localhost smtp_port 25 25 な感じです。 php.iniは SMTP = localhost smtp_port = 25 ;sendmail_path = です。 数日前までは同じ設定で受信できていましたし、 今でも送信側でエラーを吐くことはありません。 何が原因なんでしょう?

  • PHP
  • 回答数3
  • ありがとう数6

みんなの回答

  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

>> yahoo.comのアカウントのみ受信できました。 >> Gmailは何時も Message accepted for deliver とmaillogには記録されますが >> 実際に受信ボックスには入っていません。 >> プロバイダのメール(test@test.com)はData format errorが相変わらず出て、 >> 受信できませんでした。 例示いただいたスクリプトでなぜyahoo.comが受信できたのか疑問ですが、 プロバイダーの応答(Data format error)が本来の動作です。 $reciever="sato"; $to="test@test.com"; $header.="To:".$to."<".$reciever.">\n"; $sendmail=mail($to,$subject,$message,$header); 上記スクリプトには、2つの間違いが有ります。 間違い1:  "To:".$to."<".$reciever.">\n"; ではなく  "To:".$reciever."<".$to.">\n"; にする必要があります  < >内にメールアドレスを記載するのがRFC822の規定です。 間違い2:  mail関数の第一パラメータと第4パラメータ両方に To が存在しています これではヘッダーに2か所のToが存在することになり、後優先のMTAでは 上記間違い1のTo側になり、届きません。第4パラメータ両方に To を 入れてはいけません。 よって、Data format errorが出ることになります

  • Hohenheim
  • ベストアンサー率18% (43/237)
回答No.2

迷惑メール送信者として、ISP側のブラックリストに登録されてしまったのではありませんか?

methinks
質問者

補足

トータルで20通程度でもブラックリストに登録されたりするものなんでしょうか?

  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

>> 数日前まで普通に受信できていたのですが、 >> 同じコードが今は全く動作しません。 >> エラーも吐かないので原因が全く分かりません。 投稿の上記内容が正しければ、PHPのコードに間違いは無いことになります。 sendmailやシステムのログを確認してみましょう。 FeeBSDをご利用のようなので、とりあえず /var/log/maillog /var/log/messages /var/log/httpd-error.log (注:ファイル名は設定に依存) などに関連するエラーメッセージは有りませんか?

methinks
質問者

補足

早速のご回答ありがとうございます。 /var/log/maillog /var/log/messages /var/log/httpd-error.log をチェックしてみたところ、 /var/log/maillog にData format errorや、DSN: Service unavailable などのエラーを発見しました。 検索すると、 /etc/hosts に sendmail: localhost : allow を追記して解決したかのような書き込みがあったので、 追記後 $reciever="sato"; //$to="test@yahoo.com"; //$to="test@gmail.com"; $to="test@test.com"; $subject="Hello"; $header="From:test<mailaddress>\n"; $header.="To:".$to."<".$reciever.">\n"; $header.="Return-path:<mailaddress>\n"; $header.="MIME-Version: 1.0\n"; $header.="Content-Type: text/HTML; charset=ISO-8859-1\n"; $message="Hello $reciever,\n\n "; $sendmail=mail($to,$subject,$message,$header); if($sendmail) { echo "mail sent "; } else { echo "error"; } のようなコードを、3つのアドレスごとに実行したところ、yahoo.comのアカウントのみ受信できました。 Gmailは何時も Message accepted for deliver とmaillogには記録されますが 実際に受信ボックスには入っていません。 プロバイダのメール(test@test.com)はData format errorが相変わらず出て、 受信できませんでした。 ブラックリストに載ってるのかもしれません。

関連するQ&A

  • PHPでメールが送信できない

    弊社でお客様のお問い合わせフォームをPHPで作成しているのですが、 お客様の環境でメールを送信することができません。 サーバー環境は以下の通りです。 Red Hat Linux 2.6.9 Apache/2.0.52 PHP 4.3.9 原因の調査で以下のようなチェックを行いました。 【お客様に御願いしたチェック】 1. サーバーでsendmailコマンドを利用してメールが送れるか? 送ることができる。 正しくキューイングされ、送信されることまで確認OK 2. php.iniのsendmail_pathの確認 sendmail_path は /usr/sbin/sendmail -i -tになっている。 /usr/sbin/sendmailはちゃんとある 3. mail()が使えないPHP /usr/sbin/sendmail,/usr/lib/sendmailがなければmail()が使えないPHPがビルドされるケース。 標準のPHPを利用しているので、問題ない。 【弊社が担当したチェック】 1. メールを送信するPHPスクリプトの不具合 PHPスクリプト自体は正常に動作する。 php.iniのdispaly_errorsをONに変更してもエラーメッセージはでない。 2. 簡単なmail()関数を使用したチェック 以下のようなphpスクリプトで確認。 OKがブラウザに表示される。 <?php if (mail("私のメールアドレス", "テスト", "テスト本文", "From:私のメールアドレス")) { echo "OK"; } else { echo "NG"; } ?> 何か原因があるのでしょうか? どなたか教えてください。

    • ベストアンサー
    • PHP
  • mail関数が動作しない

    mail関数が使えません。 php.iniでの設定に問題があるかと思うのですが、 何処をどう見たら良いかわかりません…。 php.ini内に気になった部分なんですが、 「sendmail_path =」 に値が入っていませんでした。 ここに「/usr/sbin/sendmail -t -i 」等のパスを記述したら良いのでしょうか? (php.iniを見る事はできるのですが、更新する事はできないので確認させてもらいました)

    • ベストアンサー
    • PHP
  • 少し特殊?な状況でメール送信

    WEB関係の仕事をしていますが、まだまだ勉強中の身です。 文才がなく長文になりそうですので予めお詫び致します。 クライアント(A社とします)からPHPでメール送信プログラムの作成依頼を受けましたが、少し特殊?な状況でメール送信ができません。 WEBサーバ:A社に設置(WEB予約システムをメイン) WEBサーバの構築と管理:予約システムの制作会社(B社とします) WEBサーバ内には独自ドメインのホームページ(hoge.orgとします) ドメイン・DNS管理:C社 メールアドレス:独自ドメインで取得できず、abc@hoge.netという別ドメインで取得(C社サーバ内) という状況です。 WEBサーバ内でphpinfo()を実行したところ、メール関係では include_path = .:/usr/local/lib/php sendmail_from = no value sendmail_path = /usr/sbin/sendmail -t -i SMTP = localhost smtp_port = 25 となっています。 sendmail_fromがno valueですが、上記を見たところsendmailが起動していると思ったのですが、これだけでは判断できないのでしょうか? PHPでmb_send_mail()を実行した結果、TRUE が帰ってきますがメールは届きません。(宛先はabc@hoge.net) ちなみに、B社ではメール関係のプログラムはインストールしていないと言っています (ですが管理が杜撰なので正直、信用できません)し、WEBサーバは予約システムがメインでありメールサーバを入れると ウィルスが予約システムに影響を及ぼす可能性があるのでインストールできないと言われました。(正直、この対応にも不満が残ります) ファイル作成 → B社へ渡し → B社がサーバへアップロードと言う流れですのでこちらでサーバ設定を見ることもできません。 こういった状況でWEBサーバ内のPHPからabc@hoge.netへ送信する方法はあるのでしょうか? phpinfo()を見る限りPEARもインストールされていないようですが、これだけでは判断できませんか? B社の穴を見つけるようで気分が悪いですがクライアントの要望に答えたく考え悩んでいます。 B社いわく「”現状”の設定内で対応してくれ」とのことですので・・・。

    • ベストアンサー
    • PHP
  • スマホからPHPでメール送信したいと考えています。

    スマホからPHPでメール送信したいと考えています。 ユーザーが私のサイトにアクセスしてフォームで送信というイメージです。 使っている環境はWindowsです。 xamppもPCにインストールしてあります。 (使い方は分かっていません) スマホのサイトの情報は下記です。 SMTP  www.abcd.jp(仮に) sendmailのパス  /usr/sbin/sendmail フォームを作り、phpにデータを渡すところまでつくりました。 phpは下記のように書いています。 <?php $message = "名前:" . $_POST["namae"] . "\n電話:" . $_POST["tel"] . "\n年齢:" . $_POST["age"] . "\n本文:" . $_POST["com"]; if (!mb_send_mail("info@abcd.jp", "モバイルからのお問い合わせ", $message, "From: " . $_POST["mail"])) { exit("error"); } ?> この状態では当然のようにerrorが表示されるだけです。 あとはSMTPとかsendmailを何とかするんだと思うのですが その辺りが全くわかりません。初心者です。 ご教授お願いいたします。

    • ベストアンサー
    • PHP
  • phpでメール送信

    Warning: Mailserver rejected our "sendmail_from" setting in c:\phpdev\www\test\php\mail\mail.php on line 11 エラー:送信に失敗しました 上記の様にエラーが出て送信できません あて先は、xxxxx@yahoo.co.jp他、どのアドレスに送れません。 php.iniの部分は下記の通りです。 [mail function] ; For Win32 only. SMTP =smtp.mail.yahoo.co.jp ; For Win32 only. sendmail_from =xxxxx@yahoo.co.jp ; For Unix only. You may supply arguments as well (default: 'sendmail -t -i'). ;sendmail_path = ヤフーのsmtpサーバーは、「POP before SMTP」か何かが原因でphpからこの方法でメールは送れませんか? 現在、多くのsmtpサーバーで「POP before SMTP」がかかっていると、ネットで見たのですが、phpからメールを送りたいのですが、どうすればよいでしょか? あと、自宅マシンに独自ドメインを取得しRadishを入れて、smtpサーバを立ち上げて、こちらに送ると、携帯以外には送信出来る様です、でも今時、携帯に送信出来ないと使い物にならないので。こちらは、携帯のサーバーのセキュリティでウチのドメインがはじかれているのでしょうか? 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ローカル環境でのメール送信ができない

    ここでお願いします。 xampp-1.6.4 windows2000 PHP5.2.4 xamppでローカル環境にサーバを置き、PHPスクリプトに記述した mb_send_mail関数で自分宛てにメールの送信テストを行いました。 エラーは出なく成功したと思ったのですが、ルータのリンクが点滅してなく どうやら外部に送信されてないようなのです・・・ 何が原因なのでしょうか? [php.ini] [mail function] SMTP = localhost 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" 送信先も自分用のメールアドレスで [test.php] mb_language("Ja"); mb_internal_encoding("sjis"); @mb_send_mail(自分用のメールアドレス, 'テスト', '本文');

    • ベストアンサー
    • PHP
  • PHP/XAMPPのローカルホストからのメール送信

    1) 困っている点 PHP初心者です。PHPでXAMPPを用いてお問い合わせフォームからローカルホスト経由でメールを飛ばすことができるよう環境設定をしていますが、つまづいています。ご教示くださるようお願いします。他に試す箇所、確認すべき個所はありますでしょうか。 環境条件は、Windows11を使用。メールアドレスは外部プロバイダーメール(OCNの@dream.com)を用いて設定を試みています。XAMPPはApache/2.4.56 (Win64) OpenSSL/1.1.1t PHP/8.2.4 Server at localhost Port 80。 (なお、一通り、PHPの基本的なプログラムは記載し、Marina DB含め、ローカルホストからメールを飛ばさないPHPコードは無事動いています。) 2)PHPのコード ローカルホストから自分のgmailにメールに飛ばすテスト hogehoge@gmail.comのhogehogeの箇所は自分のメールアドレスを記載。PHPではエラーを表示するようにさせた。 <?php error_reporting(E_ALL); ini_set('display_errors', 1); mb_language('Japanese'); mb_internal_encoding('utf-8'); $to = 'hogehoge@gmail.com';  ←hogehogeは自分のgmailアドレス $subject = 'メール送信テスト:test for PHP'; $message = 'メール送信テスト:test for PHP'; $headers = 'From: 自動送信 <hogehoge@dream.com>' . "\r\n"; ←hogehogeは自分のプロバイダーアドレス $headers .= 'Content-Type: text/plain; charset=utf-8'; if(mb_send_mail($to, $subject, $message, $headers)) { echo "送信完了"; } else { echo "送信失敗"; } ?> 3) phpホルダー内のphi.iniの記載 (一部抜粋) [mail function] ; For Win32 only. ; https://php.net/smtp SMTP=localhost  ← 修正 https://php.net/smtp-port smtp_port=25     ← 修正 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" ← 修正 上記のSMTP、Portのパラメータは下記のHPを参考にし、倣った。 https://miya-system-works.com/blog/detail/xampp-send-mail/ *なお、ここの箇所では下記のパラメータでも行ったがNG。エラーメッセージは5)ii)に記載。 このパラメータはsendmail.iniで入力したものと同じ。 SMTP = smtp.ocn.ne.jp smtp_port = 465 sendmail_path = "\"C:\xampp\sendmail\sendmail.exe\" -t" 4) sendmail内ホルダーのsendmail.iniの記載 (一部抜粋) hogehogeの箇所は自分のアドレス、P/Wを入力。 pop3_~=~の箇所は三行空欄。 smtp_server=pop.ocn.ne.jp ← 修正(プロバイダー案内通り) smtp_port=465 ← 修正 (プロバイダー案内通り) smtp_ssl=auto ← 修正 auth_username=hogehoge@dream.com ← 自分のアドレスに修正 auth_password=hogehoge       ← 自分のPWに修正 ; if your smtp server uses pop3 before smtp authentication, modify the ; following three lines. do not enable unless it is required. pop3_server=       ← デフォルトのまま空欄 pop3_username=     ← デフォルトのまま空欄 pop3_password=     ← デフォルトのまま空欄 force_sender=hogehoge@dream.com ← 自分のアドレスに修正 5) ブラウザーでの表示 (上記2)のコードを走らせた後) ポートに接続できないとのエラーメッセージ。しかし、6)に記載したThunderbirdからはポート:465からメールを送れている。 i) SMTP:localhost,、SMTPポート:25の場合 Warning: mb_send_mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\test\test_sendmail_2.php on line (mb_sendとしたPHPコードのラインの箇所) 送信失敗 ii) SMTP :smtp.ocn.ne.jp、 SMTPポート:465の場合 Warning: mb_send_mail(): Failed to connect to mailserver at "pop.ocn.ne.jp" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\xampp\htdocs\test\test_sendmail_2.php on line (mb_sendとしたPHPコードのラインの箇所) 送信失敗 6)補足 なお、プロバイダーメールアドレス、PWは念のためローカルPC上にメールソフトを新規にThunderbirdを落とし、設定したところ、溜まっていたプロバイダーメールは全て落ちてきたのでPWに間違いはないことを確認済み。その際、SMTPサーバー名とsmtp_portは自動検出されたので、手打ちはしていない。Thunderbirdでは自動的にSMTPサーバー名:smtp.ocn.ne.jp、ポート:465で設定されていた。 以上よろしくお願いします。説明不足、用語の使い方で適切でない箇所がありましたら、修正、追記します。

  • PHP上でのメールフォーム送信設定

    こんにちは。 メールフォームの送信する際の設定について質問があります。 メールフォームの送信ボタンを押した後、下記のようなエラーメッセージが出ました。 Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "smtp.mail.yahoo.co.jp" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\program files\apache group\Apache\htdocs\mytest16-1.php on line 65 yahooメールを使っての送信を考えていて、yahoo側の登録は完了しました。 php.iniファイルは以下のように変更しました。 [mail function] ; For Win32 only. SMTP = smtp.mail.yahoo.co.jp←ここを直しました smtp_port = 25 ; For Win32 only. sendmail_from = xxxxxxx@yahoo.co.jp         ↑ここを直しました。 ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ;sendmail_path = その後、Outlookを利用してPOP3送受信も行い、正常に終了しました。 しかし、まだ同様のエラーが出続けてしまいます。 初心者ですので、メールに関しての知識がほとんどありません。どのように解決したらよいのかを詳しく教えていただければと思います。 よろしくお願いします。 環境:WindowsXP, Apache2.0, MySQL1.4, PHP5

    • ベストアンサー
    • PHP
  • phpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません

    phpでmb_send_mailを用いてメールの送信を試みておりますが、うまくいきません。 php.iniの現時点における設定は、以下の通りです。 [mail function] ; For Win32 only. ;SMTP = localhost ;smtp_port = 25 ; For Win32 only. ;sendmail_from = ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). sendmail_path = "sendmail -t -i" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; mbstring.func_overload = 0 ;mbstring.strict_encoding = Off なお、phpのスクリプトでは、mb_send_mail関数を呼ぶ直前に、  mb_language("ja");  mb_internal_encoding("utf-8"); を実行しております。 また、html部では、<meta…タグにおいて、charset=UTF-8の宣言を行い、 このhtml部を含むphpファイルは、文字コードUTF-8にて格納し直しました。 原因をいろいろ探ったのですが、自力では無理のようです。 原因と考えられる点をどうか教えて頂くようにお願い致します。

    • ベストアンサー
    • PHP
  • Postfix + Courier-IMAP + SquirrelMailでログインできません

    Webメールサーバーを作りたく、SquirrelMailの設定をしています。 mailコマンドでユーザー間のメール送信はできるようです。 2点わからないことがあるためご質問させてください。 1.home_mailboxの設定について   Mailbox形式にするとmailコマンドで受け取ったメールの確認ができるのですが、   Maildir形式にするとmailコマンドでは「No mail for ユーザー」と出力され、   メールの確認ができません。   これは一般的な動作なのでしょうか?(初歩的な質問ですみません) 2.Webで調べつつSquirrelMailの設定をしたのですが、   どうしてもログインできません。   BSDのユーザーとSquirrelMailは別物なのでしょうか? ■postconf -n command_directory = /usr/sbin config_directory = /etc/postfix daemon_directory = /usr/libexec/postfix debug_peer_level = 2 home_mailbox = Maildir/ html_directory = no inet_interfaces = localhost mail_owner = postfix mailq_path = /usr/bin/mailq manpage_directory = /usr/share/man mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mydomain = example.ddo.jp mydomain_fallback = localhost myhostname = example.ddo.jp mynetworks = 192.168.1.0/24, 127.0.0.0/8 mynetworks_style = host myorigin = $mydomain newaliases_path = /usr/bin/newaliases queue_directory = /private/var/spool/postfix readme_directory = /usr/share/doc/postfix sample_directory = /usr/share/doc/postfix/examples sendmail_path = /usr/sbin/sendmail setgid_group = postdrop unknown_local_recipient_reject_code = 550 ■SquirrelMail Server Settings IMAP Settings -------------- IMAP Server : localhost IMAP Port : 143 Authentication type : login Secure IMAP (TLS) : false Server software : courier Delimiter : . SMTP Settings ------------- SMTP Server : localhost SMTP Port : 25 POP before SMTP : true SMTP Authentication : none Secure SMTP (TLS) : false

専門家に質問してみよう