Email AWS弹性豆茎-邮件(发送和接收电子邮件)
我刚刚使用Elastic beanstalk将我的web应用程序从共享托管服务迁移到AWS。然而,我正在努力与电子邮件服务 我的应用程序在注册时发送验证电子邮件(使用SMTP),看起来用户没有收到电子邮件。(我仍在使用共享主机的SMTP帐户) 在使用共享托管服务时,我还使用我们的网站域名为其他团队成员创建邮件帐户,例如(noreply@domain.com) 嗯,我试图寻找一个关于我的问题的好答案,但没有一个问题完全回答了我的需要 有些人建议SES只发送电子邮件和工作邮件来接收电子邮件 就我而言,我不想使用其他服务。因为我的网站非常小,所以我希望有人能清楚地回答以下问题: 1-如何允许elastic beanstalk应用程序使用smtp发送电子邮件 2-如何在EC2实例上设置webmail(接收和发送电子邮件),或者至少在EC2实例上设置邮件服务,并使用其他客户端(例如outlook)发送电子邮件 3-如何使用网站的域名创建SMTP帐户或不同的电子邮件帐户Email AWS弹性豆茎-邮件(发送和接收电子邮件),email,amazon-web-services,amazon-ec2,smtp,amazon-elastic-beanstalk,Email,Amazon Web Services,Amazon Ec2,Smtp,Amazon Elastic Beanstalk,我刚刚使用Elastic beanstalk将我的web应用程序从共享托管服务迁移到AWS。然而,我正在努力与电子邮件服务 我的应用程序在注册时发送验证电子邮件(使用SMTP),看起来用户没有收到电子邮件。(我仍在使用共享主机的SMTP帐户) 在使用共享托管服务时,我还使用我们的网站域名为其他团队成员创建邮件帐户,例如(noreply@domain.com) 嗯,我试图寻找一个关于我的问题的好答案,但没有一个问题完全回答了我的需要 有些人建议SES只发送电子邮件和工作邮件来接收电子邮件 就我而言
PS:请用非常清楚和详细的答案回答,以便我理解,以及可能有相同问题的每个人。对于AWS上的电子邮件托管,您可以使用WorkMail或在EC2实例上配置邮件服务器。这些是您唯一的选择,除非您寻求第三方邮件托管服务。这两个选项都有很多教程,所以我在这里不赘述 您不希望在弹性Beanstalk服务器实例上运行邮件服务器。如果您的应用程序扩展,则会导致创建重复的邮件服务器,每次更新应用程序时都会删除邮件服务器,并且通常会出现各种问题。如果希望在EC2上托管邮件服务器,则需要创建一个不受Beanstalk控制的单独EC2实例
要通过SMTP从Elastic Beanstalk服务器发送电子邮件,您可以使用您选择和配置的任何邮件托管服务,或者使用SMTP电子邮件传递服务(如Amazon SES)或第三方服务(如SendGrid)。正如我最近遇到的相同问题一样(php mail()似乎不适用于Beanstalk)-我将分享一些见解。也许这里已经说过了,但请将其视为工作端解决方案 问题
您正在AWS Beanstalk EC2上使用PHP。应用程序使用名为mail()的PHP本机函数;。上传和部署应用程序时,它似乎不起作用 解决方案
1.将SMTP与PHPmailer一起使用。(我将在下面解释原因)
- class.phpmailer.php
- class.smtp.php
- phpmailerautoad.php
许多线程都假设PHP的原生函数Sendmail或mail()在EC2(或Beanstalk)上不起作用。不是真的。它确实有效。它只是坐在那里,不知道该怎么办。运行phpinfo.php并查找Sendmail。但它指向localhost。因此,它的工作方式与在本地主机上相同,它向本地主机发送邮件。这是没有设置的,所以你无论如何都看不到电子邮件(除非你使用shell阅读,没有人会阅读)。 而且,正如一些人指出的,您不应该(至少相同)将Beanstalk EC2设置为邮件服务器,因为它具有可扩展性和其他原因,但主要是因为它很难看。 还有其他方法可以解决这个问题。使用AmazonSES是一个经常被建议的解决方案。如果你想发送上千封邮件并确保它正常工作,这是很公平的。它也很贵,但目前1000封邮件的价格是0.10美元,这几乎是零。所以没有真正的争论。SES还可以提供一个SMTP服务器,可以在上面的示例中使用
我希望这能有所帮助。好吧,我真的很感谢你的回答,但是我认为你没有回答我所有的问题。我也很清楚,我不想使用Workmail和SES,因为它们花费很多。不管怎样,正如我所说,我对发送和接收电子邮件感兴趣,不仅仅是发送。而且,我可以将邮件服务器放在elastic beanstalk使用的同一个EC2实例上,因为我使用SSH更新应用程序,所以它是@SamBen如果不使用ElasticBeanstalk部署软件更新,为什么要使用ElasticBeanstalk?您是否也将其限制为始终只有一台服务器?如果是这种情况,那么您没有使用Beanstalk的任何功能,应该使用标准EC2实例。如果您只需要有关在EC2实例上设置邮件服务器的详细说明,那么快速的谷歌搜索将为您提供所需的一切。@mbraird,谢谢您的回答,我真的很高兴
<?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';
}
?>