Sam*_*Ben 3 email smtp amazon-ec2 amazon-web-services amazon-elastic-beanstalk
好吧,我刚刚使用Elastic beanstalk设法将Web应用程序从共享托管服务迁移到AWS。但是,我在努力使用电子邮件服务。
好了,我的应用程序在注册后(使用SMTP)发送了验证电子邮件,并且看起来用户没有收到电子邮件。(我仍在使用共享主机的SMTP帐户)
同样,在使用共享托管服务时,我曾经使用我们的网站域名为其他团队成员创建邮件帐户,例如(noreply@domain.com)。
好吧,我试图为我的问题寻找一个好的答案,但是没有一个问题能完全满足我的需求。
有人建议SES仅发送电子邮件,而WorkMAil则接收电子邮件。
好吧,就我而言,我不想使用其他服务。由于我的网站很小,所以我希望有人可以清楚地回答以下问题:
1-如何允许弹性beantalk应用程序使用smtp发送电子邮件。
2-如何在EC2实例上设置网络邮件(以接收和发送电子邮件),或者至少在ec2实例上设置邮件服务,以及如何使用其他客户端(例如Outlook)发送电子邮件。
3-如何使用网站域名创建SMTP帐户或其他电子邮件帐户。
附言:请回答非常清楚和详细的答案,这样我就会理解,并且每个人都有同样的问题。
对于在AWS上托管的电子邮件,您可以使用WorkMail或在EC2实例上配置邮件服务器。除非您寻求第三方邮件托管服务,否则这些是您唯一的选择。有很多关于这两种选择的教程,因此在这里我不再赘述。
您不想在Elastic Beanstalk服务器实例上运行邮件服务器。如果您的应用程序扩大规模,那将导致创建重复的邮件服务器,每次更新应用程序时都会删除邮件服务器,并且通常会出现各种问题。如果要在EC2上托管邮件服务器,则需要创建一个不受Beanstalk控制的单独EC2实例。
要从Elastic Beanstalk服务器通过SMTP发送电子邮件,您可以使用选择和配置的任何邮件托管服务,也可以使用SMTP电子邮件传递服务(例如Amazon SES)或第三方服务(例如SendGrid)。
小智 5
最近,我遇到了同一问题(php mail()在Beanstalk上似乎不起作用)-我将分享一些见解。也许已经在这里说过了,但是后来将其视为工作的最终解决方案。
问题
您正在AWS Beanstalk EC2上使用PHP。您的应用程序使用PHP本机函数mail();。当您上载和部署应用程序时,它似乎不起作用。
解决方案
1.将SMTP与PHPmailer一起使用。(我将在下面解释原因)。
https://github.com/PHPMailer,下载它如果您喜欢软件包管理,Composer等,可以使用它,但是如果您喜欢我,只是想要一件小巧而干净的东西,则只需要以下文件:
采取以下代码,并注意顶部是“链接”到您的PHPMailerAutoload.php。将其放在名为“ mail.php ” 的文件(或任何您想要的文件)中:
<?php
require '../vendor/phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
//$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.hostname.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'username'; // SMTP username
$mail->Password = 'password'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->setFrom('hello@example.com', 'Name');
$mail->addAddress('to@example.com', 'To Name'); // Add a recipient // Name is optional
$mail->addReplyTo('hello@example.com', 'Name');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$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';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
?>
Run Code Online (Sandbox Code Playgroud)(请注意,我注释掉了一些您可能不需要的东西,但可能会很好。请查看PHPmailer git hub网站https://github.com/PHPMailer/PHPMailer/wiki上的更多调整)。
背景/说明
在许多线程中都有一个假设,即PHP的本机函数Sendmail或mail()在EC2(或Beanstalk)上不起作用。不对。确实有效。它只是坐在那里,不知道该怎么办。运行一个phpinfo.php并查找Sendmail。但是它指向本地主机。因此,它的工作方式与在本地主机上相同,将邮件发送到本地主机。这不是设置程序,因此无论如何您都不会看到电子邮件(除非您使用shell来阅读它,而没人会这样做)。而且,正如某些人指出的那样,由于扩展和其他原因,您不应该将Beanstalk EC2(至少相同)设置为邮件服务器,但主要是因为它很丑陋。还有其他方法可以解决问题。经常建议使用Amazon SES。如果您想发送成千上万的邮件并确保其正常工作,这是相当公平的。这也要花钱 但这几乎不算什么,当前定价为每1000封邮件0.10美元。所以没有真正的争论。SES还可以提供SMTP服务器,并且可以在以上示例中使用。
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
5631 次 |
| 最近记录: |