我正在使用Ubuntu VM。
我有这个PHP
<?php
# --------------------------------------------------------------------------------
# Goal : send an email
# Run : curl 45.55.88.57/code/mail.php | php
$to = 'email@gmail.com';
$subject = '';
$message = 'hello';
$headers = 'From: john@gmail.com' . "\r\n" .
'Reply-To: john@gmail.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
?>
我跑了这个
curl 45.55.88.57/code/mail.php | php
我明白了
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 176 100 176 0 0 2 0 0:01:28 0:01:00 0:00:28 45
<html>
<head><title>504 Gateway Time-out</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Time-out</h1></center>
<hr><center>nginx</center>
</body>
</html>
我的代码是错误的,还是我的VM有问题?
我没有收到任何电子邮件。
答案 0 :(得分:4)
不要忘记设置您的Gmail设置。 请按照this tutorial设置Google smtp。
答案 1 :(得分:1)
在您的虚拟机中,只需在虚拟机上运行带有以下代码的测试php文件
<?php
echo phpinfo();
?>
如果仍然遇到相同的错误,则是由于虚拟机之前存在某个服务器层导致的。
但是,如果看到不同的输出,则必须看到PHP配置信息。
在配置中,查找“已加载的配置文件”,它将为您提供php.ini配置文件的确切路径。
如Tuckbros所述,在php.ini中,检查您的邮件设置(http://php.net/manual/en/mail.configuration.php#ini.smtp)。
确保已在服务器上安装sendmail并在php.ini中正确配置了“ sendmail_path”配置。
答案 2 :(得分:0)
您可以使用PHPMailer。
它很容易使用。
https://github.com/PHPMailer/PHPMailer
这是发送电子邮件的标准代码:(我已复制)
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'user@example.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipients
$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress('ellen@example.com'); // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
//Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
//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();
更多信息:
https://github.com/PHPMailer/PHPMailer/wiki/Tutorial
https://www.youtube.com/watch?v=YtNraQxUTM0
https://www.sitepoint.com/sending-emails-php-phpmailer/
让我知道是否可行。
PS。如果您想找出原因,为什么您的邮件不在Gmail收件箱中:
您的mail()的HTTP标头不安全。如果您的标头不安全,则可能会有标头注入的机会。
更多信息:
https://mediatemple.net/community/products/dv/204643950/understanding-an-email-header
https://www.gracefulsecurity.com/http-header-injection/
答案 3 :(得分:0)
您可以按照以下步骤使用来自Google的免费SMTP服务器
步骤1:
步骤2:请勿使用2因子身份验证来访问您的Google帐户。
第3步:设置POP
在计算机上,打开Gmail。点击右上角的设置
设置。单击设置。单击转发和POP / IMAP选项卡。在
“ POP下载”部分,选择“为所有邮件启用POP”或“启用”
从现在开始到达的邮件的POP。在页面底部,
点击保存更改。
步骤3:在电子邮件客户端上更改外发邮件(SMTP)服务器
smtp.gmail.com 需要SSL:是 需要TLS:是(如果可用) 需要验证:是 TLS / STARTTLS的端口:587
***如果您通过工作或学校帐户使用Gmail,请与管理员联系以获取正确的SMTP配置。
答案 4 :(得分:0)
您可能没有任何MTA(邮件传输代理)正在运行。该问题可以通过多种方式解决。如果要使用外部服务器的电子邮件地址,则最容易安装和配置一些MTA,例如非常简单的msmtp。