SMTP服务器响应:530 5.7.0必须首先发出STARTTLS命令

时间:2011-03-10 20:44:56

标签: php smtp

SMTP服务器响应:530 5.7.0必须先发出STARTTLS命令

当我在php脚本文件中使用mail()函数时,我收到此错误消息...

我使用的是使用STARTTLS的gmail SMTP服务器和gmail,它是安全的SSL以防止垃圾邮件 我已经在我的contact.php文件中使用这些命令

ini_set("SMTP","smtp.gmail.com");
ini_set("sendmail_from","<email-address>@gmail.com>");

那么我可以使用什么命令启用STARTTLS或在php,ini文件中配置?

9 个答案:

答案 0 :(得分:15)

首先,确保PHP安装具有SSL支持(在phpinfo()的输出中查找“openssl”部分)。

您可以在PHP.ini中设置以下设置:

ini_set("SMTP","ssl://smtp.gmail.com");
ini_set("smtp_port","465");

答案 1 :(得分:0)

我知道PHPMailer库可以处理这种SMTP事务。

此外,使用sendmail-SSL库的假sendmail应该可以胜任。

答案 2 :(得分:0)

就我而言,Swift Mailer也无济于事。我在这里找到了一个解决方案:http://forum.powweb.com/showthread.php?t=73406 - 所以在EHLO命令之后,需要发送STARTTLS命令,使用stream_socket_enable_crypto( $connection, true, STREAM_CRYPTO_METHOD_TLS_CLIENT );和EHLO命令启用加密。只有这个允许我用我的“顽固”SMTP服务器发送电子邮件。

答案 3 :(得分:0)

开箱即用的Swift邮件程序无法执行STARTTLS,但有些nice guys have written a patch for it

我发现修补它是一件苦差事(可能是错误的方式),所以把它压缩起来准备下载:Swift Mailer with STARTTLS

答案 4 :(得分:0)

我对以下内容的回复是错误的:

fputs($connection, 'STARTTLS'.$newLine);

结果我使用了错误的连接变量,因此我只需将其更改为:

fputs($smtpConnect, 'STARTTLS'.$newLine);

如果使用TLS,请记得在之前和之后放置HELO:

fputs($smtpConnect, 'HELO '.$localhost . $newLine);
$response = fgets($smtpConnect, 515);
if($secure == 'tls')
{
    fputs($smtpConnect, 'STARTTLS'.$newLine);
    $response = fgets($smtpConnect, 515);
stream_socket_enable_crypto($smtpConnect, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);

// Say hello again!
    fputs($smtpConnect, 'HELO '.$localhost . $newLine);
    $response = fgets($smtpConnect, 515);
}

答案 5 :(得分:0)

我将分享我的方式,并在实施以下后对我有用:

打开Php.ini文件,并从Gmail SMTP Settings

获取参考,填写相应字段中的所有值

从[mail function]语句中删除注释,这些语句是对smtp Server的说明并匹配它们的值。

sendmail SMTP服务器也是假服务器。在文本终端旁边没有任何东西(尝试在上面写任何东西。:P)。 它将使用gmail s,tp发送邮件。 因此,请通过匹配Gmail SMTP设置正确配置它:

smtp.gmail.com
Port: 587

答案 6 :(得分:-1)

解决了问题,

我编辑了文件/etc/postfix/master.cf

并评论

-o smtpd_relay_restrictions=permit_sasl_authenticated,reject

并从

更改了这一行
-o smtpd_tls_security_level=encrypt 

-o smtpd_tls_security_level=may

并且工作得很好

答案 7 :(得分:-1)

  

块引用

I then modified the php.ini file to use it (commented out the other lines):

[mail function]
; For Win32 only.
; SMTP = smtp.gmail.com
; smtp_port = 25

; For Win32 only.
; sendmail_from = <e-mail username>@gmail.com

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

Ignore the "For Unix only" comment, as this version of sendmail works for Windows.

You then have to configure the "sendmail.ini" file in the directory where sendmail was installed:

[sendmail]

smtp_server=smtp.gmail.com
smtp_port=25
error_logfile=error.log
debug_logfile=debug.log
auth_username=<username>
auth_password=<password>
force_sender=<e-mail username>@gmail.com

http://byitcurious.blogspot.com.br/2009/04/solving-must-issue-starttls-command.html

> Blockquote

答案 8 :(得分:-2)

对于Windows,我能够通过启用TLS在SMTP虚拟服务器上进行安全通信来实现它。没有证书的SMTP虚拟服务器上将不提供TLS。此链接将提供所需的步骤。

https://support.microsoft.com/en-ie/help/4014125/how-to-configure-iis-smtp-for-outgoing-tls-authentication