【问题标题】:SMTP use in PHPMailerPHPMailer中的SMTP使用
【发布时间】:2021-09-30 13:22:00
【问题描述】:

我正在使用最新版本的 PHPMailer 从我的网站发送电子邮件。我可以发送一些没有 SMTP 参数的电子邮件,但我需要将 SMTP 配置提供给我的对象 PHPMailer()。发送此电子邮件的函数在同一个文件中。

为什么有些电子邮件可能需要 SMTP 配置,而另一些则不需要?

问候

function sendEmailWithoutSMTP(){

    $bodyIntern = file_get_contents('emails/myemail.html');
    
    $mailIntern = new PHPMailer(true);

    $mailIntern->CharSet = "UTF-8";

    try {

        //Recipients
        $mailIntern->AddAddress('myemail@myemail.com', 'My address');
        $mailIntern->SetFrom('myemail@myemail.com', 'My address');
        $mailIntern->AddReplyTo('myemail@myemail.com', 'My address');
        
        //Content
        $mailIntern->Subject = 'My subject';
        $mailIntern->AltBody = '';
        $mailIntern->MsgHTML($bodyIntern);
        $mailIntern->Send();
    } catch (phpmailerException $e) {
        //echo $e->errorMessage();
    } catch (Exception $e) {
          //echo $e->getMessage();
    }
}

function sendEmailWithSMTP($email){

    require_once 'smtp/getsmtp.php';

    $smtp= get_smtp($email); 
        
    $bodyClient = file_get_contents('emails/myotheremail.html');
    
    $mailClient = new PHPMailer(true);

    $mailClient->CharSet = "UTF-8";

    try {
        
        //Server settings
        $mailClient->IsSMTP();
        $mailClient->SMTPDebug = SMTP::DEBUG_OFF;
        $mailClient->SMTPAuth = true;
        $mailClient->SMTPSecure = $smtp["secure"];
        $mailClient->Host = $smtp["host"];
        $mailClient->Username = $smtp["username"];
        $mailClient->Password = $smtp["pass"];
        $mailClient->Port = $smtp["port"];
        $mailClient->Timeout= 30;

        //Recipients
        $mailClient->AddAddress('myemail@myemail.com', 'My address');
        $mailClient->SetFrom('myemail@myemail.com', 'My address');
        $mailClient->AddReplyTo('myemail@myemail.com', 'My address');
        
        //Content
        $mailClient->Subject = 'My subject';
        $mailClient->AltBody = '';
        $mailClient->MsgHTML($bodyIntern);
        $mailClient->Send();

    } catch (phpmailerException $e) {
        //echo $e->errorMessage();
    } catch (Exception $e) {
        //echo $e->getMessage();
    }

    $this->sendEmailWithoutSMTP();
            
}

【问题讨论】:

  • 每个 SMTP 服务器都是一座城堡,有些吊桥敞开着,有些则有弓箭手、护城河和秘密握手。 (抱歉,我可能还缺少其他很酷的城堡安全功能。)因此,根据您要连接的 SMTP 服务器,需要不同的设置。最有可能的候选者是SMTPSecure,它处理 SSL/TLS,某些人需要,其他人可选,并且(希望)少数人不可用。
  • 这很奇怪,因为我是通过同一台服务器发送这封电子邮件...

标签: php codeigniter smtp phpmailer


【解决方案1】:

PHPMailer 有几种不同的消息发送方式。

首先有一个默认值,它在后台使用 PHP 内置的 mail() 函数。这不使用 SMTP,而是使用 php.ini 文件中设置的路径将消息传递给 sendmail 程序。这种发送方法不需要任何 SMTP 设置,与 SMTP 相关的参数(例如UsernameHost)将被忽略,但它确实需要您有本地邮件服务器。

isSendmail() 类似于手动构建的 PHP 内置函数,但如果您使用一些不寻常的本地邮件服务器,它会给您更多的控制权。通常你不应该使用它。

如果你调用isSMTP(),它会尝试直接使用SMTP,所有的SMTP参数都会被使用。即使您有本地邮件服务器,这也是推荐的路线,因为它更快、更安全且更易于调试。如果您需要通过远程邮件服务器(例如 gmail)发送,这是您唯一的选择。

所以在您的代码中,第一个函数是使用mail() 发送,第二个函数使用 SMTP。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 2018-09-24
相关资源
最近更新 更多