$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サーバーはありますか?
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
<?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/>";
?>
_または_
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などのメールサービスに接続しようとしている場合は、非常に便利です。
これは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を有効にしてください。
問題はPHP mail()
関数の機能が非常に限られていることです。 PHPからメールを送信する方法はいくつかあります。
mail()
はシステム上のSMTPサーバーを使用します。 Windows上で使用できるサーバーは少なくとも2つあります: hMailServer と xmail 。私は数時間かけて設定して立ち上げました。私の考えでは最初の方が簡単です。今のところ、hMailServerはWindows 7 x 64上で動作しています。mail()
は、Linuxを搭載したリモートまたは仮想マシン上のSMTPサーバーを使用します。 もちろん、Gmailのような本物のメールサービスでは、資格情報やキーがないと直接接続できません。仮想マシンをセットアップするか、LAN内にあるものを使用できます。ほとんどのLinuxディストリビューションは、箱から出してメールサーバーを持っています。それを設定して楽しんでください。私はLANインターフェースを監視するDebian 7でデフォルトのexim4を使います。どの選択をしても、抽象化層を使用することをお勧めします。 Windowsを実行している開発用マシンではPHP libraryを使用でき、Linuxを使用しているプロダクション用マシンでは単にmail()
関数を使用できます。抽象化レイヤを使用すると、アプリケーションが実行されているシステムに応じてメールドライバを交換できます。抽象MyMailer
クラスまたはインタフェースを抽象send()
メソッドで作成します。 2つのクラスMyPhpMailer
とMySwiftMailer
を継承します。適切な方法でsend()
メソッドを実装します。
認証なしで動作するSMTPサーバーはいくつかありますが、サーバーが認証を必要とする場合は、それを回避する方法はありません。
PHPの組み込みメール機能は非常に限られています - SMTPサーバーの指定はWindowsでのみ可能です。 * nixでは、mail()
はOSのバイナリを使います。
ネット上の任意のSMTPサーバーにEメールを送信したい場合は、 SwiftMailer のようなライブラリを使用することを検討してください。これにより、たとえばGoogle Mailの送信サーバーを使用できるようになります。
あなたが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
完全な文書化はここにあります。