不使用 SMTP 的 PHPmailer

问题描述 投票:0回答:3

我已将 PHPMailer 文件夹添加到 Web 服务器上的根文件夹中,但我刚刚收到与 SMTP 有关的错误。

有没有一种方法可以在不需要登录邮件帐户的情况下使用PHPMailer? 我可以让服务器将电子邮件发送到某个地址吗?

我正在搜索这个网站并找到了这个

$email = new PHPMailer();
$email->From      = '[email protected]';
$email->FromName  = 'Your Name';
$email->Subject   = 'Message Subject';
$email->Body      = $bodytext;
$email->AddAddress( '[email protected]' );

$file_to_attach = 'PATH_OF_YOUR_FILE_HERE';

$email->AddAttachment( $file_to_attach , 'NameOfFile.pdf' );

return $email->Send();

但是我收到一个错误,上面写着

"Message could not be sent.Mailer Error: You must provide at least one recipient email address."

php phpmailer
3个回答
24
投票

我注释掉了 SMTP 行,现在它可以工作了

<?php

require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

//$mail->isSMTP();                                      // Set mailer to use SMTP
//$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
//$mail->SMTPAuth = true;                               // Enable SMTP authentication
//$mail->Username = '';                 // SMTP username
//$mail->Password = '';                           // SMTP password
//$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
//$mail->Port = 587;                                    // TCP port to connect to

$mail->From = '[email protected]';
$mail->FromName = 'Mailer';
$mail->addAddress('[email protected]', 'User');     // Add a recipient
$mail->addAddress('[email protected]');               // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');

$mail->addAttachment('');         // 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';
}
?>

6
投票

约瑟夫·克雷菲尔斯二世是正确的。

特别请参阅

class.phpmailer.php
文件中的注释:

/**
 * Sets Mailer to send message using SMTP.
 * @return void
 */
public function IsSMTP() {
   $this->Mailer = 'smtp';
}

/**
 * Sets Mailer to send message using PHP mail() function.
 * @return void
 */
public function IsMail() {
  $this->Mailer = 'mail';
}

/**
 * Sets Mailer to send message using the $Sendmail program.
 * @return void
 */
public function IsSendmail() {
  if (!stristr(ini_get('sendmail_path'), 'sendmail')) {
    $this->Sendmail = '/var/qmail/bin/sendmail';
  }
  $this->Mailer = 'sendmail';
}

因此,请务必从您的设置中删除

$mail->IsSMTP();
,但是 also 您可能需要添加
$mail->IsMail();
$mail->IsSendmail();
,具体取决于您的服务器设置。


0
投票

这在 2024 年还有效吗?因为目前我正在尝试通过 PHP Mailer 发送电子邮件而不使用 SMTP 服务器,还可以吗?现在大部分网站都建议使用smtp服务器,但问题是我无法设置setFrom。

© www.soinside.com 2019 - 2024. All rights reserved.