web-dev-qa-db-ja.com

でメールを送信する PHP SMTPサーバーから

$from = "[email protected]";
$headers = "From:" . $from;
echo mail ("[email protected]" ,"testmailfunction" , "Oj",$headers);

PHPでメールを送信できません。 SMTP server response: 530 SMTP authentication is requiredというエラーが出ます。

私はあなたが確認するためにあなたがSMTPなしで電子メールを送ることができるという印象の下にありました。私はこのメールがおそらく除外されることを知っています、しかしそれは今問題ではありません。

[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]

これはphp.iniファイルの設定です。 SMTPを設定するにはどうすればいいですか?検証を必要としない、または自分でサーバーを設定する必要があるSMTPサーバーはありますか?

113
Borut Flis

SMTP認証を必要とするサーバーを介してEメールを送信する場合は、実際にそれを指定し、ホスト、ユーザー名、およびパスワード(デフォルトではない場合はポート)を設定する必要があります。

たとえば、私は通常PHPMailerを以下のような設定で使用します。

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 25;                    // set the SMTP port for the GMAIL server
$mail->Username   = "username"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

PHPMailerの詳細についてはこちらをご覧ください。 https://github.com/PHPMailer/PHPMailer

148
Ivo Pereira
<?php
    ini_set("SMTP", "aspmx.l.google.com");
    ini_set("sendmail_from", "[email protected]");

    $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = [email protected]";

    $headers = "From: [email protected]";


    mail("[email protected]", "Testing", $message, $headers);
    echo "Check your email now....<BR/>";
?>

_または_

読み取りオン

42
Dipesh Parmar

Unixユーザーの場合、mail()は実際には Sendmail コマンドを使用してEメールを送信します。アプリケーションを変更する代わりに、環境を変更することができます。 msmtp は、Sendmail互換のCLI構文を持つSMTPクライアントで、Sendmailの代わりに使用できます。 php.iniを少し変更するだけで済みます。

sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t"

それから、低度のmail()関数でさえもSMTPの良さで動作することができます。アプリケーションを変更せずに既存のアプリケーションをsendgridやmandrillなどのメールサービスに接続しようとしている場合は、非常に便利です。

40
txyoji

これはPHP PEARでそれを行う方法です。

// Pear Mail Library
require_once "Mail.php";

$from = '<[email protected]>'; //change this to your email address
$to = '<[email protected]>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'Host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => '[email protected]', //your gmail account
        'password' => 'snip' // your password
    ));

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

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

Gmail SMTPを使用している場合は、Gmailアカウントの設定でSMTPを有効にしてください。

13
Bolli

問題はPHP mail()関数の機能が非常に限られていることです。 PHPからメールを送信する方法はいくつかあります。

  1. mail()はシステム上のSMTPサーバーを使用します。 Windows上で使用できるサーバーは少なくとも2つあります: hMailServerxmail 。私は数時間かけて設定して立ち上げました。私の考えでは最初の方が簡単です。今のところ、hMailServerはWindows 7 x 64上で動作しています。
  2. mail()は、Linuxを搭載したリモートまたは仮想マシン上のSMTPサーバーを使用します。 もちろん、Gmailのような本物のメールサービスでは、資格情報やキーがないと直接接続できません。仮想マシンをセットアップするか、LAN内にあるものを使用できます。ほとんどのLinuxディストリビューションは、箱から出してメールサーバーを持っています。それを設定して楽しんでください。私はLANインターフェースを監視するDebian 7でデフォルトのexim4を使います。
  3. メーリングライブラリは直接接続を使用します。 Libは設定が簡単です。私はSwiftMailerを使いました、そしてそれは完全にGmailアカウントからメールを送ります。 PHPMailerもかなりいいと思います。

どの選択をしても、抽象化層を使用することをお勧めします。 Windowsを実行している開発用マシンではPHP libraryを使用でき、Linuxを使用しているプロダクション用マシンでは単にmail()関数を使用できます。抽象化レイヤを使用すると、アプリケーションが実行されているシステムに応じてメールドライバを交換できます。抽象MyMailerクラスまたはインタフェースを抽象send()メソッドで作成します。 2つのクラスMyPhpMailerMySwiftMailerを継承します。適切な方法でsend()メソッドを実装します。

12
George Sovetov

認証なしで動作するSMTPサーバーはいくつかありますが、サーバーが認証を必要とする場合は、それを回避する方法はありません。

PHPの組み込みメール機能は非常に限られています - SMTPサーバーの指定はWindowsでのみ可能です。 * nixでは、mail()はOSのバイナリを使います。

ネット上の任意のSMTPサーバーにEメールを送信したい場合は、 SwiftMailer のようなライブラリを使用することを検討してください。これにより、たとえばGoogle Mailの送信サーバーを使用できるようになります。

10
Pekka 웃

あなたがLinux上でWordpressのサイトをホストしていて、サーバーアクセスを持っている場合、あなたは標準のphp mail()関数からsmtpを通して送ることを可能にするmsmtpをインストールすることによっていくらかの頭痛を避けることができます。 msmtpは、もう少し設定が必要なpostfixのより簡単な代替方法です。

手順は次のとおりです。

Msmtpをインストールする

Sudo apt-get install msmtp-mta ca-certificates

新しい設定ファイルを作成します。

Sudo nano /etc/msmtprc

...以下の設定情報があります。

# Set defaults.    
defaults

# Enable or disable TLS/SSL encryption.
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Set up a default account's settings.
account default
Host <smtp.example.net>
port 587
auth on
user <[email protected]>
password <password>
from <[email protected]>
syslog LOG_MAIL

あなたは "<"と ">"内のすべてによって表される設定データを置き換える必要があります(包括的に、これらを削除してください)。 Host/username/passwordには、メールプロバイダを通じてメールを送信するための通常の資格情報を使用します。

使用するようにPHPに伝えます

Sudo nano /etc/php5/Apache2/php.ini

この一行を追加してください:

sendmail_path = /usr/bin/msmtp -t

完全な文書化はここにあります。

https://marlam.de/msmtp/ /

2
Peter Drinnan