问题是我想使用stream_socket_client
连接到雅虎邮箱的smtp服务器。
$host = 'smtp.mail.yahoo.com';
$port = 587;
$errno = 0;
$errstr = '';
$smtp_conn = stream_socket_client(
'tls://'.$host . ":" . $port,
$errno,
$errstr,
30
);
,它会出现以下错误
警告: stream_socket_client():SSL操作失败,代码为1. OpenSSL错误消息:错误:1408F10B:SSL例程:SSL3_GET_RECORD: C:\ xampp \ htdocs \中的版本号错误index.php 在 53
行
我首先使用了 phpMailer ,它运行得很好,但我想自己做。
我该如何解决这个问题?谢谢。
答案 0 :(得分:2)
端口587(提交)不用于直接TLS连接,但您需要进行普通连接,读取SMTP欢迎,发送EHLO和读取响应,然后发出STARTTLS命令并读取响应。只有这样(并且只有在成功响应STARTTLS之后),您才能将现有套接字升级到TLS。使用Perl工具swaks,您可以看到对话框:
=== Trying smtp.mail.yahoo.com:587...
=== Connected to smtp.mail.yahoo.com.
<- 220 smtp.mail.yahoo.com ESMTP ready
-> EHLO my.hostname
<- 250-smtp.mail.yahoo.com
<- 250-PIPELINING
<- 250-SIZE 41697280
<- 250-8 BITMIME
<- 250 STARTTLS
-> STARTTLS
<- 220 2.0.0 Start TLS
=== TLS started with cipher TLSv1:RC4-SHA:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=CA/L=Sunnyvale/O=Yahoo! Inc./OU=Yahoo Mail/CN=smtp.mail.yahoo.com"
如果要进行直接SSL连接,则必须使用端口465(smtps)。