web-dev-qa-db-ja.com

PHP PEARメールの問題

PEARメールを使用して外部SMTPサーバーを使用して送信しようとしています。しばらくハングしたようですが、スクリプトが終了します。1つまでのすべての「echo」ステートメントが出力されます。送信後。「送信前」というエコーを超えて何も出力されません。ここで何が問題なのか誰か教えてもらえますか?(smtp値の代わりにダミー値)メールが送信されていません。ご協力いただきありがとうございます。

echo "start";
$n = $_POST['txtName'];
$e = $_POST['txtEmail'];
$t = 'Kenny <[email protected]>';
$f = 'Kenny <[email protected]>';
$s = 'CPA TEST';
$b = "name: $n email: $e"; 

include("mail.php");
echo "after include";
/* mail setup recipients, subject etc */
$recipients = $t;
$headers["From"] = $f;
$headers["To"] = $t;
$headers["Subject"] = $s;
$mailmsg = $b;
/* SMTP server name, port, user/passwd */
$smtpinfo["Host"] = "my_smtp_Host";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "my_email";
$smtpinfo["password"] = "my_password";
echo "before object";
/* Create the mail object using the Mail::factory method */
$mail_object =& Mail::factory("smtp", $smtpinfo);
echo "before send";
/* Ok send mail */
$send = $mail_object->send($recipients, $headers, $mailmsg);
echo "after send";
if (PEAR::isError($send)) { print($send->getMessage());}else{print "end";} 
echo "done";
17
Kenny

これを試して、メールが機能していることを確認してください。

<?php
require_once "Mail.php";

$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$Host = "mail.example.com";
$username = "smtp_username";
$password = "smtp_password";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('Host' => $Host,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

これが機能しない場合は、PHP構成を確認する必要があります。

詳細については、 http://php.net/manual/en/function.mail.php を参照してください。

6
Todd Moses

誰かがLinuxで実行していて、Jaymeと同じ問題が発生した場合。不足している「Net /」クラスをインストールするための別の簡単な解決策を次に示します。これらの欠落したクラスにより、スクリプトが中断されます。

Sudo pear install Net_SMTP

48
Vynz

Sendコマンドでハングしたのと同じ問題が発生しました。私の最初のステップは、コマンドラインから実行して完全なエラーメッセージを表示することでした(Rapが上記で提案したように)。

php mymailsample.php

以下を吐き出します

Warning:  include_once(Net/SMTP.php): failed to open stream: No such file or directory in mail/Mail/smtp.php on line 348
PHP Warning:  include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/lib/php') in mail/Mail/smtp.php on line 348
PHP Fatal error:  Class 'Net_SMTP' not found inmail/Mail/smtp.php on line 349

以下をダウンロードして/ Netに入れました

http://pear.php.net/package/Net_SMTP/download
http://pear.php.net/package/Net_Socket/download

SMTPライブラリとSocketライブラリの権限を調整して、Apacheで読み取れるようにする必要がありました。

そして出来上がり、それはうまくいきました!

15
Jayme Dunlap

Channel://pear.php.net/Mail-1.2.0の再インストールは私には機能しません。(Ubuntu12.04)

新しい前に文字「&」を削除するだけです

Sudo vi /usr/share/php/Mail/smtp.php
    349         /*$this->_smtp = &new Net_SMTP($this->Host, */
    350         $this->_smtp = new Net_SMTP($this->Host,
4
ericL

Toddのスクリプトは優れていますが、SMTPよりも先にブラウザがタイムアウトするという問題は解決しません。そのため、ページの半分しか表示されず、SMTP設定のデバッグに使用できるエラーメッセージは表示されません。

解決策は、PHPスクリプトを直接実行することです。タイムアウトはありません。

ISPからシェルアクセスが許可されていないためにそれができない場合は、毎分実行するcronジョブを作成してください。 Cronは、完全なデバッグの詳細が記載された出力を電子メールで送信します。

1
Rap

私は実際に同じ問題に遭遇しました。プロダクションスクリプトが故障し、トラブルシューティングに苦労しました。主な理由は、エラーが表示されないようにするコードが多すぎたためです。最終的に、私はKenny Rayのコードを使用し、自分の環境で機能するようにコードを変更して、テストを実行しました。 Net_Socketがどういうわけか消えたことが判明しました。アンインストールして再インストールしたところ、すべてが再び機能し始めました。これがお役に立てば幸いです。

0
Jackson Leung