我有两个相似的代码部分,用
java和PHP编写.由于证书错误,PHP没有发送电子邮件 –
原文链接:/php/136229.htmlConnection Failed. Error #2: stream_socket_enable_crypto(): Peer certificate CN=*.hosting.com' did not match expected CN=smtp.anotherhosting.com'
但java代码发送电子邮件没有任何问题,我无法理解为什么. (从任何地方我都看到问题 – how to skip ssl checks with java?
这是代码:
PHP:
<?PHP require './PHPMailer.PHP'; require './SMTP.PHP'; use PHPMailer\PHPMailer\PHPMailer; $mail = new PHPMailer(true); try { $mail->SMTPDebug = 4; $mail->isSMTP(); $mail->Host = 'smtp.anotherhosting.com'; $mail->SMTPAuth = true; $mail->Username = 'username@anotherhosting.com'; $mail->Password = 'password'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; //Recipients $mail->setFrom('from@company.com'); $mail->addAddress('myemail@company.com'); $mail->isHTML(true); $mail->Subject = 'Here is the subject12'; $mail->Body = 'This is the HTML message bo22dy <b>in bold!</b>'; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo 'Message could not be sent. Mailer Error: ',$mail->ErrorInfo; } try { $mail->smtpClose(); } catch (Exception $e) { echo $e->getTraceAsString(); }
和java:
import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class Main { public static void main(String[] args) { final String username = "username@anotherhosting.com"; final String password = "password"; Properties props = new Properties(); props.put("mail.smtp.auth","true"); props.put("mail.smtp.starttls.enable","true"); props.put("mail.smtp.host","smtp.anotherhosting.com"); props.put("mail.smtp.port","587"); Session session = Session.getInstance(props,new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username,password); } }); session.setDebug(true); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("from@company.com")); message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("myemail@company.com")); message.setSubject("Testing Subject"); message.setText("Dear Mail Crawler," + "\n\n No spam to my email,please!"); Transport.send(message); System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); } } }
我的任务是使用PHP代码实现电子邮件发送功能.从我目前的角度来看,由于从一个主机到另一个主机的smtp重定向,它失败了.最有可能的是,PHPmailer获取host1,接收重定向到host2,从host2获取证书并将此证书与host1进行比较.同时,java客户端做的一切都很好.如果有人知道如何解决这个问题,请告诉我.
此外,当它试图调用stream_socket_enable_crypto时,PHP代码在line 402失败.
这是日志文件:
Java的:
DEBUG: setDebug: JavaMail version 1.4ea DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems,Inc] DEBUG SMTP: useEhlo true,useAuth true DEBUG SMTP: useEhlo true,useAuth true DEBUG SMTP: trying to connect to host "smtp.anotherhosting.com",port 587,isSSL false 220 mailpod.hosting.com ESMTP DEBUG SMTP: connected to host "smtp.anotherhosting.com",port: 587 EHLO degr [most probably my computer name] 250-mailpod.hosting.com 250-STARTTLS 250-PIPELINING 250-8BITMIME 250-SIZE 65000000 250 AUTH LOGIN PLAIN CRAM-MD5 DEBUG SMTP: Found extension "STARTTLS",arg "" DEBUG SMTP: Found extension "PIPELINING",arg "" DEBUG SMTP: Found extension "8BITMIME",arg "" DEBUG SMTP: Found extension "SIZE",arg "65000000" DEBUG SMTP: Found extension "AUTH",arg "LOGIN PLAIN CRAM-MD5" STARTTLS 220 ready for tls EHLO degr 250-mailpod.hosting.com 250-PIPELINING 250-8BITMIME 250-SIZE 65000000 250 AUTH LOGIN PLAIN CRAM-MD5 DEBUG SMTP: Found extension "PIPELINING",arg "LOGIN PLAIN CRAM-MD5" DEBUG SMTP: Attempt to authenticate AUTH LOGIN 334 [auth hash here] [auth hash here] 334 [auth hash here] [auth hash here] 235 ok,go ahead (#2.0.0) DEBUG SMTP: use8bit false MAIL FROM:<from@company.com> 250 ok RCPT TO:<myemail@company.com> 250 ok DEBUG SMTP: Verified Addresses DEBUG SMTP: myemail@company.com DATA 354 go ahead From: from@company.com To: myemail@company.com Message-ID: <1338668845.01537892151523.JavaMail.myemail@company.com> Subject: Testing Subject MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Dear Mail Crawler,No spam to my email,please! . 250 ok 1537892155 qp 173024 QUIT 221 mailpod.hosting.com Done
PHP:
2018-09-25 16:26:35 Connection: opening to smtp.anotherhosting.com:587,timeout=300,options=array() 2018-09-25 16:26:35 Connection: opened 2018-09-25 16:26:35 SMTP INBOUND: "220 mailpod.hosting.com ESMTP" 2018-09-25 16:26:35 SERVER -> CLIENT: 220 mailpod.hosting.com ESMTP 2018-09-25 16:26:37 CLIENT -> SERVER: EHLO localhost 2018-09-25 16:26:38 SMTP INBOUND: "250-mailpod.hosting.com" 2018-09-25 16:26:38 SMTP INBOUND: "250-STARTTLS" 2018-09-25 16:26:38 SMTP INBOUND: "250-PIPELINING" 2018-09-25 16:26:38 SMTP INBOUND: "250-8BITMIME" 2018-09-25 16:26:38 SMTP INBOUND: "250-SIZE 65000000" 2018-09-25 16:26:38 SMTP INBOUND: "250 AUTH LOGIN PLAIN CRAM-MD5" 2018-09-25 16:26:38 SERVER -> CLIENT: 250-mailpod.hosting.com250-STARTTLS250-PIPELINING250-8BITMIME250-SIZE 65000000250 AUTH LOGIN PLAIN CRAM-MD5 2018-09-25 16:26:38 CLIENT -> SERVER: STARTTLS 2018-09-25 16:26:38 SMTP INBOUND: "220 ready for tls" 2018-09-25 16:26:38 SERVER -> CLIENT: 220 ready for tls 2018-09-25 16:26:38 Connection Failed. Error #2: stream_socket_enable_crypto(): Peer certificate CN=*.hosting.com' did not match expected CN=smtp.anotherhosting.com' [C:\project\SMTP.PHP line 402] SMTP Error: Could not connect to SMTP host. 2018-09-25 16:26:39 CLIENT -> SERVER: QUIT 2018-09-25 16:26:39 2018-09-25 16:26:39 2018-09-25 16:26:39 2018-09-25 16:26:39 Connection: closed SMTP Error: Could not connect to SMTP host. Message could not be sent. Mailer Error: SMTP Error: Could not connect to SMTP host.