将SMTP凭据传递给PHPMailer配置,而不在heroku中公开它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将SMTP凭据传递给PHPMailer配置,而不在heroku中公开它相关的知识,希望对你有一定的参考价值。

我正在使用phpmailer库。要发送电子邮件,我需要指定smtp服务器,smtp用户和smtp密码。问题是我正在使用云平台Heroku,我使用github存储库自动部署到heroku,我不希望我的smtp用户名和密码是公开的。有办法解决这个问题吗?

以下是代码段

  $mail = new PHPMailer(false); // Passing `true` enables exceptions

    //Server settings
    //$mail->SMTPDebug = 1;//Enable verbose debug output
    $mail->isSMTP();//Set mailer to use SMTP
    $mail->Host = 'smtp host';//Specify main and backup SMTP servers
    $mail->SMTPAuth = true;//Enable SMTP authentication
    $mail->Username = 'user';//SMTP username
    $mail->Password = 'password';//SMTP password
    $mail->SMTPSecure = 'tls';//Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;//TCP port to connect to


    //Recipients
    $mail->setFrom('example@example.com','myapp');
    $mail->addAddress('hi@examle.com');//Add a recipient
    //$mail->addAddress('ellen@example.com');//Name is optional
    $mail->addReplyTo('support@example.com','Contact');



    //Content
    $mail->ishtml(true);//Set email format to HTML
    $mail->Subject = 'test';

    $mail->Body    = 'this is a test';


    $mail->send();
答案

一种不暴露但在代码中使用它的方法是在环境变量中设置SMTP用户名和密码

为heroku应用程序设置环境变量的过程记录在此链接中 - https://devcenter.heroku.com/articles/config-vars

在环境变量中设置用户名和密码后,可以使用以下代码访问它们

    $mail->isSMTP();//Set mailer to use SMTP
    $mail->Host = 'smtp host';//Specify main and backup SMTP servers
    $mail->SMTPAuth = true;//Enable SMTP authentication
    //Assuming SMTP_USERNAME is your environment variable which holds username
    $mail->Username = getenv('SMTP_USERNAME');
    //Assuming SMTP_PASSWORD is your environment variable which holds password
    $mail->Password = getenv('SMTP_PASSWORD');
    $mail->SMTPSecure = 'tls';//Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;//TCP port to connect to

参考文献 - Use Heroku config vars with PHP?

另一答案

有很多可能的方法 -

  1. 使用Heroku CLI https://devcenter.heroku.com/categories/command-line
  2. 您可以在您的网站中创建一个管理页面,您可以在其中放置将保留到文件的smtp服务详细信息。在heroku dyno重启之前,此文件将可用。
  3. 您可以使用Dropbox进行部署
  4. 而不是Github你可以使用bitbucket,它也是免费的git repo https://confluence.atlassian.com/bitbucket/deploy-to-heroku-872013667.html

以上是关于将SMTP凭据传递给PHPMailer配置,而不在heroku中公开它的主要内容,如果未能解决你的问题,请参考以下文章

将 NTLM 凭据传递给远程 Web 服务

如何将自定义凭据传递给 Spring Boot ldap

LoginView 并将凭据传递给 Powershell

将凭据传递给 Sql Report Server 2008

如何将用户凭据传递给 Web 服务?

Worklight 将登录凭据传递给 iframed 服务器端内容