Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email AWS弹性豆茎-邮件(发送和接收电子邮件)_Email_Amazon Web Services_Amazon Ec2_Smtp_Amazon Elastic Beanstalk - Fatal编程技术网

Email AWS弹性豆茎-邮件(发送和接收电子邮件)

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只发送电子邮件和工作邮件来接收电子邮件 就我而言

我刚刚使用Elastic beanstalk将我的web应用程序从共享托管服务迁移到AWS。然而,我正在努力与电子邮件服务

我的应用程序在注册时发送验证电子邮件(使用SMTP),看起来用户没有收到电子邮件。(我仍在使用共享主机的SMTP帐户)

在使用共享托管服务时,我还使用我们的网站域名为其他团队成员创建邮件帐户,例如(noreply@domain.com)

嗯,我试图寻找一个关于我的问题的好答案,但没有一个问题完全回答了我的需要

有些人建议SES只发送电子邮件和工作邮件来接收电子邮件

就我而言,我不想使用其他服务。因为我的网站非常小,所以我希望有人能清楚地回答以下问题:

1-如何允许elastic beanstalk应用程序使用smtp发送电子邮件

2-如何在EC2实例上设置webmail(接收和发送电子邮件),或者至少在EC2实例上设置邮件服务,并使用其他客户端(例如outlook)发送电子邮件

3-如何使用网站的域名创建SMTP帐户或不同的电子邮件帐户


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
  • 将这些文件放在您自己的文件夹结构中,如vendor/phpmailer/%此处的三个文件%
  • 使用下面的代码,注意顶部是“链接”到phpmailerautoad.php的。将其放入名为“mail.php”的文件中(或您想要的任何文件):

    
    
  • (请注意,我注释了一些您可能不需要的东西,但可能是好的。有关更多调整,请访问PHPmailer git hub网站)

  • 现在您只需要运行“mail.php”,它就会发送一封电子邮件。当然,您必须使用真正的SMTP服务器(也可以使用Gmail,但请检查PHPmailer)。一旦您看到它在运行,您可以调整它以在整个php应用程序中工作。您必须构建一个新函数来代替PHP mail()。为什么?我将在下一段讨论这个问题
  • 背景/描述
    许多线程都假设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';
    }
    ?>