PHPで外部のレンタルサーバーにメール送信できない原因と解決方法

このQ&Aのポイント
  • PHPで外部のレンタルサーバーにメール送信したいが上手くできない問題の原因と解決方法について解説します。
  • 現在、OutlookExpressではメール送信ができており、社内のメールサーバー(ArGo Mail)にもLANと外部から送信ができている状況です。しかし、レンタルサーバーではメール送信がうまくいっていないようです。
  • 原因として考えられるのは、自分のルーターの設定の問題やPHPでSMTP-AUTHやPOP before SMTPを適切に設定できていない可能性があります。解決策については、自分のレベルに合わせて取り組むべきです。
回答を見る
  • ベストアンサー

Q)PHPでメール送信について

Q)PHPで外部のレンタルサーバーにメール送信したいのですが上手く 送信できません。 (現在の状況) ・OutlookExpress だと勿論okです。 ・社内のメールサーバー(ArGo Mail) にはLAN,及び外からも 送信できました。 (レンタルサーバーの状況) 1)メールサーバーのMTAとしてqmailを採用しています。 2)SMTP-AUTH Outlook Expressの設定(Ver.5.5 6.0) 3)POP before SMTP  となっていますが、1)は業者さんに自社サーバー内でテスト頂き、okでした。 ------------------------------------------------------------ となると、原因は (1)私のルーター設定の問題 (2)PHPで   2)SMTP-AUTH Outlook Expressの設定(Ver.5.5 6.0)   3)POP before SMTP を対応させるの何れか?ぐらいしか思いつかないのですが 私のレベルが低いのでどこから取り組んだらいいのかよく解りません、何方かご教授宜しくお願いいたします。 ------------------------------------------------------------ テストしたPHP <?PHP mb_language("Ja") ; mb_internal_encoding("shift-jis") ; $mailto ="hanako@aaa.bbb.cc"; $subject ="花子さん"; $content ="よろしくお願いします。"; $mailfrom "From:" .mb_encode_mimeheader("yorosiku") ."<taro@xxx.yyy.zz>"; mb_send_mail($mailto,$subject,$content,$mailfrom); ?> ------------------------------------------------------------ (環境) Windows xp(sp2) Apache(V2.0.58) PHP(V5.1.4)

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

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

レンタルサーバをSMTPサーバとして送信したいということでしょうか?? 2)SMTP-AUTH 実際に使ったことはありませんが、Net_SMTP::auth() http://peardoc.xole.net/package.networking.net-smtp.net-smtp.auth.html 3)PbS 一度POP3で受信(login?)した後に送信する http://peardoc.xole.net/package.networking.net-pop3.html

syosin-oyaji
質問者

お礼

tany180sx 様、ご教授ありがとうございました。 教えていただいたサイトを参考に ・PEAR の「Net_SMTP」と「Mail」をインストールしたら、上手く送信出来る様になりました。 *ありがとうございました。 ・それから、  メール送信は出来る様になったのですが、この "xxxx.php" をバッチで実行する方法をご存知でしたら、教えて下さい。(google検索でもいいのが検索できませんでした。)  *この質問は、別No.が良さそうなので別件でも登録してみます。 -------------------------------------------------- 今後ともよろしくお願いいたします。

その他の回答 (1)

回答No.1

> Q)PHPで外部のレンタルサーバーにメール送信したいのですが上手く > 送信できません。 うまく送信できない状況を、サーバからのエラーメッセージを添えるなどの方法を用いて できるだけ具体的に教えてください。 具体的な回答は、具体的な質問から生まれます。

syosin-oyaji
質問者

補足

totsugiino様、ありがとうございます。 添付させて頂いたソースの実行結果ですが、エラーメッセージは 何も表示されません。表示できる設定方法があったら教えて下さい。 非常に参考になります。 それから「php.ini」の内容も添付しますので、 よろしくお願いいたします。 -------------------------------------------------------- [mail function] ; For Win32 only. SMTP = localhost ; for Win32 only smtp_port = 587 sendmail_from= wwwwww@xxxxx.yyyyy.zz; for Win32 only (レンタルサーバーに登録済みアカウント) -------------------------------------------------------- 以上、的を得なくて済みません。

関連するQ&A

  • ローカル環境でのメール送信

    PHP超初心者です。 ローカル環境でmb_send_mail関数をつかってメール送信をしたいのです が、上手くいきません。 エラーメッセージは Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 530 5.7.0 Must issue a STARTTLS command first n44sm11126503pyh in C:\xampp\htdocs\○○○\○○.php on line 15 とでています。 文字コードはUTF-8で保存しており、 <?php mb_language("ja"); mb_internal_encoding("UTF-8"); $mailto="○○○@○○○.jp"; $subject="タイトル"; $content="内容"; $mailfrom="From:".mb_encode_mimeheader("nicoko")."<○○○@フリーメールアドレス.com>"; mb_send_mail($mailto,$subject,$content,$mailfrom); ?> です。 15行目はmb_send_mail($mailto,$subject,$content,$mailfrom); 色々調べたところ、 (1)SMTP = メールアドレス用のsmtpサーバの設定 (2)smtp_port = 25 (3)sendmail_from = メールアドレス を設定しなおし、 C:\xampp\apache\bin\php.ini C:\xampp\php\php.ini C:\xampp\php\php5.ini C:\xampp\php\php4\php.ini 全ての設定を変更しました。 またphpinfoで確認したところ(1)~(3)まで変更されていました。 (3)はOutlookのメールのアカウント→プロパティを見て サーバー情報→送信メールに○○.○○○.jpと書いてあり、 それをうつしました。 宜しくお願いします。

    • ベストアンサー
    • 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
  • mb_send_mailでのメール送信がエラーしてしまいます。

    PHPを独習しています。 mb_send_mailでのメール送信でつまづいてしまっており、 ご回答いただければ幸いです。 mb_string等の設定は正常に出来ていると思うのですが、 下記のとおり、mailserverに接続できない旨のエラーが 表示されてしまいます。 ●エラー本文 Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "(契約サーバー)" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Program Files\Apache Group\Apache2\htdocs\sample\Part4\4-8\4-8-1.php on line 11 ●PHP本文 $mailto = "(自分のアドレス)"; $subject = "test"; $content = "本文test"; $mailfrom = "From:aaaa@bbb.ccc"; $mailfrom="From:" .mb_encode_mimeheader("木村") ." <ddd@eee.fff>"; if (mb_send_mail($mailto,$subject,$content,$mailfrom)){ echo "送信成功"; }else{ echo "送信失敗"; もしお分かりになる方がいれば、 どうかご教授のほど、よろしくお願いします。

    • ベストアンサー
    • 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
  • メール送信処理作成について

    下記のページを参考にVCにてメール送信処理を作成しています。 猫でもわかる... http://www.kumei.ne.jp/c_lang/sdk3/sdk_229.htm ただ送信するためには認証が必要なのですね。 OEで受信しないと送信に成功しませんでした。 調べたところ POP before SMTP、SMTP AUTHといった認証方法が あるのはわかったのですが(今回のケースはPOP before SMTP、今後はSMTP AUTHが主流になりそう) メール送信処理を作成するにあたり、認証は どの様に実現すべきなのでしょうか? POP before SMTPに関しては送信前に一回受信すればよいというのはわかります。(それでも処理の関係上、受信メールをサーバーに残す必要があったりと単純に受信するだけではだめなので不明点も多いですが) さらに、今後普及しそうなAUTHに関してはここの過去ログも参考にさせていただきましたが恥ずかしながら???です。 ご存知の方、よろしくお願いいたします。

  • PHPの定期実行[ Linux&cron ]

    Redhat9.0 PHP4.3.3を利用しています。 cronとコマンドライン版のPHPを利用して「1分毎に自分にメールを送る(実験用)」プログラムを実行させたいのですが、コマンドラインでは実行可能なのに、cronに登録してもメールが送られてきません。cronにはプログラムを実行したログが残っています。 完全に行き詰ってしまった。よろしくお願いします。 [ crontab ] * * * * * php /home/hoge/mail.php [ mail.php ] mb_language("Ja"); mb_internal_encoding("SJIS") ; $subject="test"; $content = "test"; $mailfrom="From:hoge@hoge.jp"; $mailto="***@hoge.com"; mb_send_mail($mailto,$subject,$content,$mailfrom);

    • ベストアンサー
    • PHP
  • phpで携帯にURLをメール送信したい

    php初心者です。お世話になっています。 上手く説明できないかもしれないですが、 20.phpというページで、20.txtからランダムにURLを取り出しています。 この取り出したURLをmail.phpによって 携帯にメール送信したいと思います。 --------20.php---------------- <?php srand((double)microtime()*1000000); $url = "http://*******/?f="; $ad_list1 = file("20.txt"); $ad_key1 = array_rand($ad_list1, 2); $ad1 = $ad_list1[$ad_key1[0]]; $array_ad1 = explode(" ", $ad1); // 表示 echo "<a href=\"$url" . $array_ad1[0] . "\">" . $array_ad1[1] . "</a>"; ?> <form action="mail.php" method="POST" class="form" target="_blank"> <input name="mail1" type="text" class="size-300px" value="あなたの携帯アドレス" style="color:#666666;" onfocus='ClearText1(this, 1)'><br> <input type="submit" name="Submit" value=" 送信 "> </form> --------20.txt------------------ 111 あああ 222 いいい 333 ううう --------mail.php---------------- <?php mb_language("Ja") ; mb_internal_encoding("Shift_JIS") ; $mailto=$mail1; $subject="URL"; $content="ご利用有難う御座います\n紹介者は$array_ad1[1]\n こちらからどうぞ\n$url.$array_ad1[0]"; $mailfrom="From:" .mb_encode_mimeheader("aaaa") ."<http://xxxxxxxx/index.html>"; mb_send_mail($mailto,$subject,$content,$mailfrom); ?> ------------------------------------------- ソースはこんな感じで、メール送信もできました。 メール本文内に「あああ」や「http://*******/?f=111」といった形で文字を代入したいのですが これだけが上手くいきません。 ご指導よろしくお願いしますm(_ _)m

    • ベストアンサー
    • PHP
  • 現在趣味でPHPを勉強しています。PHPでメールが送信できずに困ってい

    現在趣味でPHPを勉強しています。PHPでメールが送信できずに困っています。お手数をおかけして申しわけありませんが、皆様のお知恵をお借しいただけますでしょうか。 よろしくお願いいたします。 ■サーバ環境 OS:windowsXP PHP:5.3.0 Apahce:2.2.11 ■困っている内容 PHP.iniで以下の設定の上、以下のプログラムでメール送信しましたが、以下のエラーが返ってきて送信できません。 (1)php.ini設定 *プロバイダーに指定されたメールサーバーとメールアドレス。コマンドプロンプトからはtelnetに接続でき、メール送信も可能。 [mail function] ; For Win32 only. ; http://php.net/smtp SMTP = mb.nifty.com ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = xxxxxx@nifty.com (2)送信プログラム <?php //内部エンコーディング mb_internal_encoding("UTF-8"); //メール内容 $add = "xxxxx@live.jp"; $subject = "test"; $msg = "test"; //メールエンコーディング mb_language("Japanese"); //メール送信 if(mb_send_mail($add,$subject,mb_convert_encoding($msg,"JIS","UTF-8"))){ print "送信完了しました"; }else{ print "メール送信に失敗しました"; } ?> (3)エラー内容 Warning: mb_send_mail() [function.mb-send-mail]: SMTP server response: 501 5.0.0 Invalid domain name in C:\wamp\www\test\mail.php on line 15 メール送信に失敗しました (4)備考 自分でエラー内容からいろいろ調べてみたのですが、そのものずばりのエラー内容は少なく、何が原因かわかりませんでした。エラー内容からPHPがメール送信しようとしてもサーバではじかれているような感じがするのですが、いかがでしょうか。 ご存知の方がいらっしゃいましたらご教示ください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPで外部SMTPサーバーを利用したメールの送信方法

    PHPで外部SMTPサーバーを利用したメールの送信方法を調べています。 過去の事例からPEARを使用すれば良いことが分かりPEARをインストールしたのですが、 実行すると「$smtp = Mail::factory("smtp", $params);」の所で、 「Fatal error: Class 'Mail' not found in C:\Inetpub\wwwroot\Mail.php on line 14」と なってしまいます。 PEARのインストール後はサーバーの再起動は行っております。 ※環境 OS:WindowsXP Pro SP3 WebServer:IIS PHP:Ver.5.2.6 ※PEARのインストール状態 C:\Documents and Settings\horie>C:\php\pear list PHP Warning: Module 'mbstring' already loaded in Unknown on line 0 INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE Archive_Tar 1.3.2 stable Console_Getopt 1.2.3 stable PEAR 1.7.1 stable Structures_Graph 1.0.2 stable ※Mail.php <?php $params["host"] = "smtp.mail.yahoo.co.jp"; $params["auth"] = true; $params["username"] = "AAA-BBB"; $params["password"] = "9999"; $sender = "aaa**@yahoo.co.jp"; $recipient = "bbb**@yahoo.co.jp"; $subject = "TEST"; $subject = mb_convert_encoding($subject, "jis", "sjis"); $subject = mb_encode_mimeheader($subject, "jis"); $message = "テストメッセージ"; $message = mb_convert_encoding($message, "jis", "sjis"); require_once 'Mail.php'; $smtp = Mail::factory("smtp", $params); if (PEAR::isError($smtp)) die($smtp->getMessage()); $headers['From'] = $sender; $headers['Subject'] = $subject; $headers['MIME-Version'] = "1.0"; $headers['Content-Type'] = 'text/plain; charset="iso-2022-jp"'; $headers['Content-Transfer-Encoding'] = "8bit"; $headers['X-Mailer'] = "PHP PEAR/Mail(smtp)"; $error = $smtp->send($recipient, $headers, $message); if (PEAR::isError($error)) die($error->getMessage()); exit("メッセージを送信しました"); ?>

    • ベストアンサー
    • 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で設定されていた。 以上よろしくお願いします。説明不足、用語の使い方で適切でない箇所がありましたら、修正、追記します。