PHPを使用してSMTPサーバーからメールを送信する


131
$from = "someonelse@example.com";
$headers = "From:" . $from;
echo mail ("borutflis1@gmail.com" ,"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 = someonelse@example.com

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

回答:


168

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

たとえば、私は通常、これと同様の設定でPHPMailerを使用します。

$mail = new PHPMailer();

// Settings
$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

// Content
$mail->isHTML(true);                                  // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$mail->send();

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


21
phpMailerの+1-PHPの組み込みmail()関数に代わる正気な人。
SDC

8
PHPMailerもWordPressに組み込まれており、'phpmailer_init'アクションフックを使用して構成できることは、この答えに出くわしたことに注意してください。これは、WordPressをSMTPメールまたはAmazon SES(SMTP接続をサポートする)用に設定する便利な方法です。
Matt van Andel、2015

1
PHPメーラーは有料スクリプトで使用できますか?
Luka

2
@ルカはい、そうです。彼らのライセンスファイルによると、PHPMailerはLGPL 2.1ライセンスを使用しており、商用利用が可能です。
アレハンドロ

このコードを使用するために何か特別なことをする必要がありますか?これはどこに置くの?POSTリクエストを含むHTML5フォームで呼び出すことはできますか?このPHPMailerオブジェクトを作成したら、どうすればメールを送信できますか?
アーロンフランケ

53
<?php
ini_set("SMTP", "aspmx.l.google.com");
ini_set("sendmail_from", "YOURMAIL@gmail.com");

$message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com";

$headers = "From: YOURMAIL@gmail.com";

mail("Sending@provider.com", "Testing", $message, $headers);
echo "Check your email now....&lt;BR/>";
?>

または、詳細については、をお読みください。


メールの送信に使用しているIPは、550-5.7.1で直接サーバーにメールを送信することを許可されていません。このエラーが発生します。必要なのはオープンメールリレーだけです。
Borut Flis 2013年

静的IPを持っていません。オープンメールリレーについて知っていますか。
Borut Flis 2013年

1
さらに、google SMTPリレーについては、support.google.com / a / answer / 176600?hl = jaを参照してください
fyrye 2014年

5
これはgodaddy php mail()機能の問題に対する最良の答えです-2017 -PHPMailerや他のサードパーティのリソースをダウンロードする必要はありません-ありがとう
soulshined

4
"READ ON"リンクが壊れている
vladkras 2018年

46

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

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

そうすれば、卑劣なmail()関数でもSMTPの良さを利用できます。アプリケーションを変更せずに、sendgridやmandrillなどのメールサービスに既存のアプリケーションを接続する場合に非常に便利です。


1
素晴らしいソリューションです。今すぐ複数のサーバーで使用してください!
raice 2015

3
メーリングライブラリを使用しないアプリのDockerコンテナーにこれを実装します。
Batandwa 2016年

バニラmail()からSMTPをサポートするものへの優れた移行パス。ありがとうございました!
rinogo 2018

MSMTPはWindowsでも使用できます。明らかなダウンロードにはバージョン1.4があります。どこかで見つけたバージョンは1.6.2です。Windows用の1.8.6があるかどうかわからない。
Bilbo、

著者は、2016年2月までにWindowsバイナリの提供を中止しました。
ビルボ、

17

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

  1. mail()システムでSMTPサーバーを使用します。Windowsでは、少なくとも2つのサーバーhMailServerxmailを使用できます。私は数時間かけてそれらを構成して立ち上げました。私の意見では、最初の方が簡単です。現在、hMailServerはWindows 7 x64で動作しています。
  2. mail()Linuxのリモートマシンまたは仮想マシンでSMTPサーバーを使用します。もちろん、Gmailのような実際のメールサービスでは、資格情報やキーがないと直接接続できません。仮想マシンをセットアップするか、LANにある仮想マシンを使用できます。ほとんどのLinuxディストリビューションには、メールサーバーが標準装備されています。設定して楽しんでください。LANインターフェイスをリッスンするDebian 7ではデフォルトのexim4を使用しています。
  3. メーリングライブラリは直接接続を使用します。ライブラリはセットアップが簡単です。私はSwiftMailerを使用し、Gmailアカウントからメールを完全に送信しました。PHPMailerもかなり良いと思います。

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


17

PHP PEARでそれを行う方法は次のとおりです

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

$from = '<your@mail.com>'; //change this to your email address
$to = '<someone@mail.com>'; // 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' => 'your@gmail.com', //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を必ず有効にしてください。

編集: debian / ubuntuでMail.phpが見つからない場合は、php-pearを次のようにインストールできます。

sudo apt install php-pear

次に、メール拡張機能をインストールします。

sudo pear install mail
sudo pear install Net_SMTP
sudo pear install Auth_SASL
sudo pear install mail_mime

次に、単にrequire_once "Mail.php" それがここにある他の方法でそれをロードできるはずです:/usr/share/php/Mail.php


1
require_once( '/usr/share/somewhere/Mail.php');

10

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

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

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


2

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 <username@example.net>
password <password>
from <address-to-receive-bounces@example.net>
syslog LOG_MAIL

"<"および ">"内のすべてで表される構成データを置き換える必要があります(これらを含み、これらを削除します)。ホスト/ユーザー名/パスワードには、メールプロバイダー経由でメールを送信するための通常の認証情報を使用します。

PHPに使用するように指示する

sudo nano /etc/php5/apache2/php.ini

次の1行を追加します。

sendmail_path = /usr/bin/msmtp -t

完全なドキュメンテーションはここにあります:

https://marlam.de/msmtp/


:ssmtpをも解見る(フランス語ガイド)であるelliptips.info/guide-debian-7-envoi-de-mails-ligne-de-commande
ıɾuǝʞ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.