1

我在使用 swiftmailer 时遇到了一些问题。它一直在我身上崩溃,但如果我取出 ->sentTo 它不会出错,但我也无法收到电子邮件。

我对自己做错了什么感到困惑。

require_once 'lib/swift_required.php';

// Using smtp
//$transport = Swift_SmtpTransport::newInstance('my_smtp_host.com', 25)

//Using Gmail
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl") 
  ->setUsername('***') // or your gmail username
  ->setPassword('***'); // or your gmail password

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance($subject)
  ->setFrom(array($email => $name))
  ->setTo(array('John.Doe@gmail.com' => 'John Doe'))
   ->setBody($content, 'text/html');

$message->attach(
Swift_Attachment::fromPath($_FILES['userfile']['name'])->setFilename($pic['tmp_name'])
);

// Send the message
$result = $mailer->send($message);

?>

致命错误:

Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username "...." using 2 possible authenticators' in ../lib/classes/Swift/Transport/Esmtp/AuthHandler.php:184 

Stack trace: 

0 ../lib/classes/Swift/Transport/Esmtp/EsmtpTransport.php(312): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport)) 

1 ../lib/classes/Swift/Transport/AbstractSmtpTransport.php(120): Swift_Transport_EsmtpTransport->_doHeloCommand() 

2 ../lib/classes/Swift/Mailer.php(80): Swift_Transport_AbstractSmtpTransport->start() 

3 upload.php(73): Swift_Mailer->send(Object(Swift_Message)) 

4 {main} thrown in lib/classes/Swift/Transport/Esmtp/AuthHandler.php on line 184
4

2 回答 2

0

不得不将消息附件更改为:

$message->attach(
    Swift_Attachment::fromPath($theDirectory)->setFilename($fileNameForEmail)
    );

    // Send the message
    $result = $mailer->send($message);
}
else{
        echo 'The file you have chosen is invalid. Please go back and try again.';
}
于 2013-02-19T18:00:05.240 回答
0

这:

无法使用 2 个可能的身份验证器在用户名“....”的 SMTP 服务器上进行身份验证

... 正是它所说的意思。Gmail 不接受您的用户名和密码,原因可能是它们错误或您未能提供某些必需的参数。

根据Stack Overflow 上的其他问题和我自己的测试,主机名、端口和加密是正确的。所以可能的问题包括:

  1. 您提供的用户名不正确。
  2. 您提供的密码不正确。
  3. 如果您启用了双向身份验证,则需要生成应用程序特定密码。这个视频解释了如何。

解决此问题后,您可能会遇到以下异常:

未捕获的异常“Swift_IoException”,带有消息“无法打开文件以读取 []”

...由此代码触发:

Swift_Attachment::fromPath($_FILES['userfile']['name'])

如果您从$_FILES数组中读取错误项目的原因:fromPath()需要读取文件系统路径,但$_FILES['userfile']['name']包含客户端计算机上文件的原始名称。

于 2013-02-19T18:01:47.000 回答