如何在 UNIX 计算机上为 SMTP 外发电子邮件设置 XAMPP

J. *_*son 1 php email methods class

我使用 registerNewUser 方法创建了一个 PHP Mail 类。基本上正如我的标题所说,该方法返回 true,而它应该返回 false,因为我没有收到电子邮件。有人可以解释我是否做错了什么吗?(请不要评论我向用户发送未加密的密码。此未加密的密码是一个 25 个字符的字母数字随机生成的密码。安全性在这里不是问题)我不希望使用某种类型的框架。我想手动编写代码,所以请不要告诉我使用 PHPMailer 或类似的东西。

编辑:我发现我需要设置 XAMPP 以使用 SMTP 发送传出电子邮件。这个问题不是重复的,因为每个其他问题的所有其他答案都是基于 Windows 的,即使如此,也没有提供有关如何在 XAMPP 本地主机服务器上设置 SMTP 的分步说明。

这是代码:

<?php
class Mail {

  private $headers;

  public function __construct() {
    // Setting Up Mail Headers
    $this->headers  = "MIME-Version: 1.0 \r\n";
    $this->headers .= "Content-type: text/html; charset=iso-8859-1 \r\n";
    $this->headers .= "From: Admin @ NAStepsOnline <no-reply@NAStepsOnline.com>\r\n"."X-Mailer: php";
  }

  /**
  * @desc                   Mails the User from registration email.
  *                         This function should only be called through
  *                         registerNew() within the user.class file
  * @param  str $userName   First Name of the user
  * @param  str $userEmail  Email address of the user
  * @param  str $userPass   Password of user (UNENCRYPTED)
  * @return bool            True = Mail Sent Sucessfully
  *                         False = Mail Not Sent
  */
  public function registerNewUser($userName, $userEmail, $userPass) {
    // Define Subject Line
    $subject = "Thanks " . $userName . " for Registering On NAStepsOnline.com";
    // Setting Up Message to the User
    $msg = "<html><body>";
    $msg .= $userName . " Thanks for registering at NAStepsOnline.com<br><br>";
    $msg .= "Here is your password (case sensitive): " . $userPass . "<br><br>";
    $msg .= "Please use the login form to login.<br>";
    $msg .= "To assign a sponsor to your account please visit the Profile Settings page and click on My Sponsor.<br>";
    $msg .= "If you have any problems please contact us using the Contact Us page.<br><br>";
    $msg .= "Thanks,<br>The Team @ NAStepsOnline.com";
    $msg .= "</body></html>";

    // Mailing the user Registration
    $mail = mail($userEmail, $subject, $msg, $this->headers);
    if($mail) {
      return true;
    } else {
      return false;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

nix*_*ix9 5

首先安装一个sendmail

sudo apt-get install sendmail

在该php.ini文件中找到[mail function]并更改如下:

    SMTP=smtp.gmail.com
    smtp_port=587
    sendmail_from=your@gmail.com
    sendmail_path=/usr/sbin/sendmail -t -i
Run Code Online (Sandbox Code Playgroud)
  • 视窗

    Now edit the `sendmail.ini`:
    
     [sendmail]
     smtp_server=smtp.gmail.com
     smtp_port=587
     error_logfile=error.log 
     debug_logfile=debug.log
     auth_username=username@gmail.com
     auth_password=gmail-password
     force_sender=username@gmail.com
    
    Run Code Online (Sandbox Code Playgroud)
  • Linux

    安装完成后,sendmail您可以运行以下命令: sudo sendmailconfig。回答[Y]所有问题。

    新建目录:

     sudo mkdir -m 700 /etc/mail/authinfo && cd /etc/mail/authinfo
    
    Run Code Online (Sandbox Code Playgroud)

    创建新文件:

     sudo touch ./gmail-auth
    
    Run Code Online (Sandbox Code Playgroud)

    插入以下内容:

     AuthInfo: "U:YOUR ACCOUNT NAME" "I:YOUR GMAIL EMAIL ADDRESS" "P:YOUR GMAIL PASSWORD"
    
    Run Code Online (Sandbox Code Playgroud)

    创建新的哈希图:

     makemap hash gmail-auth < gmail-auth
    
    Run Code Online (Sandbox Code Playgroud)

    打开/etc/mail/sendmail.mc上面第一个MAILER定义添加:

     define(`SMART_HOST',`[smtp.gmail.com]')dnl
     define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
     define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
     define(`confAUTH_OPTIONS', `A p')dnl
     TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
     define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5    LOGIN PLAIN')dnl
     FEATURE(`authinfo',`hash -o /etc/mail/authinfo/gmail-auth')dnl
    
    Run Code Online (Sandbox Code Playgroud)

    重建配置并重新启动sendmail服务

      sudo make -C /etc/mail && sudo service sendmail restart
    
    Run Code Online (Sandbox Code Playgroud)
  • 苹果系统

    安装自制程序并sendmail使用brew install sendmail以下命令获取安装目录:brew info sendmail执行本答案的Linux部分中的相同配置步骤。