gpt4 book ai didi

email - AWS Elastic Beanstalk - 邮件(发送和接收电子邮件)

转载 作者:行者123 更新时间:2023-12-02 00:36:01 26 4
gpt4 key购买 nike

我刚刚成功使用 Elastic beanstalk 将我的 Web 应用程序从共享托管服务迁移到 AWS。然而,我在电子邮件服务方面遇到了困难。

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

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

好吧,我试图寻找有关我的问题的良好答案,但没有一个问题能够完全满足我的需求。

有些人建议 SES 仅发送电子邮件,而 WorkMAil 则建议接收电子邮件。

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

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

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

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

PS:请用非常清晰详细的答案回答,以便我以及可能有相同问题的每个人都能理解。

最佳答案

由于我最近遇到了同样的问题(php mail() 似乎不适用于 Beanstalk) - 我将分享一些见解。也许已经在这里说过了,但随后将其视为工作最终解决方案。

问题
您正在 AWS Beanstalk EC2 上使用 PHP。您的应用程序使用名为 mail(); 的 PHP native 函数。当您上传和部署应用程序时,它似乎不起作用。

解决方案
1. 将 SMTP 与 PHPmailer 结合使用。 (我将在下面解释原因)。

  • https://github.com/PHPMailer喜欢的话就下载吧管理、 Composer 等,你可以使用它,但如果你喜欢我,就想要一些小而干净的东西,你只需要以下文件:

    • class.phpmailer.php
    • class.smtp.php
    • PHPMailerAutoload.php
  • 将这些文件放在您自己的文件夹结构中,例如vendor/phpmailer/%这里的三个文件%。
  • 采用以下代码,请注意顶部“链接”到您的 PHPMailerAutoload.php。将其放入名为“ma​​il.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';
    }
    ?>
  • (请注意,我注释掉了一些您可能不需要的内容,但可能会很好。请查看 PHPmailer git hub 网站 https://github.com/PHPMailer/PHPMailer/wiki 以了解更多调整)。

  • 现在您只需运行“mail.php”,它就会发送一封电子邮件。当然,您必须使用真正的 SMTP 服务器(也可以使用 Gmail,但请检查 PHPmailer)。一旦您看到它的运行情况,您就可以对其进行调整以使其在您的 php 应用程序中正常工作。您必须构建一个新函数来代替 PHP mail()。为什么?我将在下一段中讨论这一点
  • 背景/描述
    许多线程中都假设 PHP 的原生函数 Sendmail 或 mail() 在 EC2(或 Beanstalk)上不起作用。不对。它确实有效。它只是坐在那里,不知道该怎么办。运行 phpinfo.php 并查找 Sendmail。但它指向本地主机。因此它的工作方式与本地主机相同,它将邮件发送到本地主机。这是没有设置的,所以你无论如何都看不到电子邮件(除非你使用 shell 来阅读它,而没有人这样做)。而且,正如一些人指出的那样,由于扩展和其他原因,您不应该将(至少相同的)Beanstalk EC2 设置为邮件服务器,但主要是因为它很难看。还有其他方法可以解决该问题。使用 Amazon SES 是一种经常建议的解决方案。如果您想发送数千封邮件并确保其正常工作,那就很公平了。它还需要付费,但与目前 1000 封邮件 0.10 美元的定价相比,这几乎不算什么。所以没有真正的争论。 SES 还可以提供 SMTP 服务器,并且可以在上面的示例中使用。

    我希望这会有所帮助。

    关于email - AWS Elastic Beanstalk - 邮件(发送和接收电子邮件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628491/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com