web-dev-qa-db-ja.com

PHPメールのSMTP設定

Phpのメール機能を利用して、自分のサイトからメールを送信しています。しかし、現在は機能していないため、ホスティングチームに連絡したところ、サーバーでいくつかの変更を行ったため、smtpを使用するように言われました。私はそれを行う方法がわかりません。現在のコード(phpメール機能を使用)は次のとおりです。これを使用して行う必要がある変更について、だれでも手伝ってください。

<?php
$mail_To="[email protected]";
$headers = "";
$headers .= "From: [email protected]\n";
$headers .= "Reply-To: [email protected]\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "X-Mailer: php";
$mail_Subject = " Live TV key";
$mail_Body = "<p>Muscle-tube</p>";
mail($mail_To, $mail_Subject, $mail_Body,$headers);
?>
11
shin

PHPのmail()関数は、SMTPをサポートしていません。 PEAR Mail package のようなものを使用する必要があります。

SMTPメールスクリプトの例を次に示します。

<?php
require_once("Mail.php");

$from = "Your Name <[email protected]>";
$to = "Their Name <[email protected]>";
$subject = "Subject";
$body = "Lorem ipsum dolor sit amet, consectetur adipiscing elit...";

$Host = "mailserver.blahblah.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>Error sending mail:<br/>" . $mail->getMessage() . "</p>");
} else {
    echo("<p>Message sent.</p>");
}
?>
14
JCD

PHPメール設定はphp.iniファイルから取得されます。デフォルトは多かれ少なかれ次のようになります:

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; Log all mail() calls including the full path of the script, line #, to address and headers
;mail.log =

Php.iniファイルを編集することで、PHPスクリプトを変更せずに問題を修正できるはずです。また、telnetツールとHELO、MAIL FROM、RCPT TOを使用して接続をテストできます、DATA、QUITコマンドで直接SMTPサーバーに接続します。sendmailを使用すれば、それは必要ありません。sendmailは何をしているかを知っているはずです(ただし、あなたの場合はそうではなかったでしょうし、sendmailの設定にはおそらく少しの助けが必要です) 。)

2
Alexis Wilke

しかし、現在は機能していないため、ホスティングチームに連絡したところ、smtpを使用するように言われました。

Newsflash-以前はSMTPを使用していました。彼らはあなたが問題を解決するために必要な情報をあなたに提供していません-またはあなたはそれをここで正確に伝えていません。

ウェブサーバーのローカルMTAが無効になっている可能性があります。その場合、リモートマシンのSMTPポートに接続する必要があります。あなたのために重い仕事をするたくさんのツールキットがあります。個人的には phpmailer が好きです。他の機能が追加されるからです。

確かに、彼らが以前にあった施設を取り去り、サービスの料金を払った場合、プロバイダーはそれよりも優れたサポートを提供しているはずです(完全なMTAの代わりにドロップするプログラムもたくさんあります。ジョブ)。

C.

0
symcbean

ここでの回答の一部は、SMTPの一般的な設定に関連しているため(それが機能して停止していた@shinodの特定の問題だけでなく)、これは非常に簡単であるため、回答を更新すると役立つと思いましたそれが今まであったより今やってください:-)

PHP 4では、PEARメールパッケージは通常既にインストールされています。この非常にシンプルなチュートリアルでは、phpに追加する必要がある数行のコードを示しています。ファイル http://email.about.com/od/emailprogrammingtips/qt/PHP_Email_SMTP_Authentication.htm

ほとんどのホスティング会社は、必要なSMTP設定をリストしています。私はJustHostを使用していますが、それらは https://my.justhost.com/cgi/help/26(送信メールサーバーの下)

0
Chaya Cooper

pHPのemail()関数は、基盤となるmail transfer agentにメールを渡します。これは、通常、Linuxシステムではpostfixです。

そのため、Linuxで推奨される方法は、postfixを構成してrelayhostを使用することです。

relayhost = smtp.example.com

/etc/postfix/main.cf

しかし、OPのシナリオでは、彼のhosting teamがやるべきだったのはどういうわけか私はどうやら疑っています

0
ptica