web-dev-qa-db-ja.com

PHP=電子メールを送信するには?

Phpスクリプトを使用して、Webサイトのユーザーにメールを送信する必要があります。 PHPでメール機能を使用してみました。
私のコードは次のとおりです。

  $to = "[email protected]";
  $subject = "Test mail";
  $message = "My message";
  $from = "[email protected]";
  $headers = "From:" . $from;
  mail($to,$subject,$message,$headers);

プログラムを実行しようとすると、これが得られます:

 Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set().

$ from変数に含めるアドレスを教えてください。これにはsmtpサーバーが必要ですか?ローカルホストを使用してメールを送信するにはどうすればよいですか? php.iniファイルで編集する内容を正確に教えてください

私はこのすべてに初めてです。助けてください..

6
abcdefgh

代わりにPHPMailerを使用します。 https://github.com/PHPMailer/PHPMailer

どうやって使うのですか:

require('./PHPMailer/class.phpmailer.php');
$mail=new PHPMailer();
$mail->CharSet = 'UTF-8';

$body = 'This is the message';

$mail->IsSMTP();
$mail->Host       = 'smtp.gmail.com';

$mail->SMTPSecure = 'tls';
$mail->Port       = 587;
$mail->SMTPDebug  = 1;
$mail->SMTPAuth   = true;

$mail->Username   = '[email protected]';
$mail->Password   = '123!@#';

$mail->SetFrom('[email protected]', $name);
$mail->AddReplyTo('[email protected]','no-reply');
$mail->Subject    = 'subject';
$mail->MsgHTML($body);

$mail->AddAddress('[email protected]', 'title1');
$mail->AddAddress('[email protected]', 'title2'); /* ... */

$mail->AddAttachment($fileName);
$mail->send();
3
pooria

電子メールを送信するには、ローカルマシンでsmtpサービスをセットアップする必要があります。グーグルで検索するだけで自由に利用できるものがたくさんあります。

サーバーまたはVPSを所有している場合は、スクリプトをアップロードすると正常に機能します。

3
user2541120

このようにphp.iniを設定します

SMTP = smtp.gmail.com

[mail function]
; XAMPP: Comment out this if you want to work with an SMTP Server like Mercury

; SMTP = smtp.gmail.com

; smtp_port = 465

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = postmaster@localhost
1
achref akrouti

これはローカルホストでは機能しませんが、サーバーにアップロードされるため、このコードでうまくいくはずです。必ず$ to行に自分のメールアドレスを入力してください。

<?php
if (isset($_POST['name']) && isset($_POST['email'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $to = '[email protected]';
    $subject = "New Message on KristjanMark.com";
    $body = '<html>
                <body>
                    <h2>Title</h2>
                    <br>
                    <p>Name:<br>'.$name.'</p>
                    <p>Email:<br>'.$email.'</p>

                </body>
            </html>';

//headers
$headers = "From: ".$name." <".$email.">\r\n";
$headers = "Reply-To: ".$email."\r\n";
$headers = "MIME-Version: 1.0\r\n";
$headers = "Content-type: text/html; charset=utf-8";

//send
$send = mail($to, $subject, $body, $headers);
if ($send) {
    echo '<br>';
    echo "Success. Thanks for Your Message.";
} else {
    echo 'Error.';
}
}
?>

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="" method="post">
            <input type="text" name="name" placeholder="Your Name"><br>
            <input type="text" name="email" placeholder="Your Email"><br>
            <button type="submit">Subscribe</button>
        </form>
    </body>
</html>
1
Kris M

他の人のメールサーバーを介してメッセージを送信することはできません。ホストプロバイダーにメールの送信方法を確認してください。 PHPを使用せずにサーバーからメールを送信してみてください。Outookなどの任意のメールクライアントを使用できます。動作した直後に、電子メールクライアントのSMTP(電子メールの送信)構成でPHP.iniを構成してください。

1
neves

これが私に答えを与えるリンクです。Gmailを使用しています。

Install「Windows用の偽のsendmail」をインストールします。 XAMPPを使用していない場合は、ここからダウンロードできます。 http://glob.com.au/sendmail/sendmail.Zip

Modifyphp.iniファイルを使用する(他の行をコメントアウト):

メール機能

Win32のみ。

SMTP = smtp.gmail.com
smtp_port = 25
For Win32 only.
sendmail_from = <e-mail username>@gmail.com

Unixのみ。

引数も指定できます(デフォルト:sendmail -t -i)。

sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

(実際にはsendmailを使用しているため、「Unix only」ビットは無視してください)

次に、sendmailがインストールされたディレクトリで「sendmail.ini」ファイルを設定する必要があります。

sendmail

smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=<username>
auth_password=<password>
force_sender=<e-mail username>@gmail.com
0
Mani Kandan

通常、問題が発生したときに開始するのに適した場所は マニュアル です。 configuring email のページでは、MSWindowsと他のすべてのオペレーティングシステムで実行されるPHP mailコマンドの間に大きな違いがあることを説明しています。質問を投稿する場合は良い考えですシステムのその部分がどのように構成され、どのオペレーティングシステムで実行されているかに関する関連情報を提供します。

PHPは、SMTPサーバーと通信するように設定されています-MSWindowsマシンのデフォルトですが、MTAがインストールされていないか、接続をブロックしています。行うべきことのリストのかなり高い、それは些細な練習ではありません-あなたは本当にあなたが1つを設定して安全に実行するために何をしているのかを知る必要があります。他の人が管理します.

Gmailアドレスを使用してリモートMTAに接続するため、おそらくGmailのサーバーを使用する必要があります。 SMTP認証とおそらくSSLサポートが必要になります。どちらもPHPのmail()関数ではサポートされていません。 swiftmailer with gmail を使用した簡単な例、または phpmailerを使用した例

0
symcbean

これを修正するには、PHP.INIと、サーバーにあるメールサービスの設定を確認する必要があります。

しかし、あなたへの私の最善のアドバイスは、mail()関数を忘れることです。 PHP.INI設定に依存し、その構成はプラットフォーム(LinuxまたはWindows)によって異なり、SMTP認証を処理できません今日では大きな問題です。頭痛が多すぎる。

代わりに「PHP Mailer」を使用してください( https://github.com/PHPMailer/PHPMailer )、これはPHPクラスが無料で利用でき、ほとんどすべてを処理できます内部または外部のSMTPサーバーは、認証の有無にかかわらず、LinuxとWindowsでまったく同じように機能し、PHP.INI設定に依存しません。多くの例が付属しており、非常に強力で使いやすいです。

0
Marcovecchio