【发布时间】:2015-12-17 13:08:16
【问题描述】:
我无法在 Java 中发送电子邮件,它抛出异常:无法连接到 SMTP 主机:x.x.x.x,端口:25。
我 telnet x.x.x.x 25 OK 并且我使用相同的主机、端口、用户和密码以 php 代码成功发送了电子邮件,所以我认为这个问题不是由于网络或防火墙问题。
在测试中,我使用 gmail 服务器 (smtp.gmail.com :465) 在 java 中发送电子邮件 OK,但不是使用主机:x.x.x.x 端口 25。
这是我的 java 代码: 主机=x.x.x.x
Properties mailServerProperties = System.getProperties();
mailServerProperties.put("mail.smtp.user", USER);
mailServerProperties.put("mail.smtp.host", HOST);
mailServerProperties.put("mail.smtp.port", 25);
mailServerProperties.put("mail.smtp.debug", "true");
mailServerProperties.put("mail.smtp.auth", "true");
mailServerProperties.put("mail.smtp.starttls.enable", "true");
mailServerProperties.put("mail.smtp.socketFactory.port", 25);
mailServerProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
javax.mail.Session getMailSession = javax.mail.Session.getDefaultInstance(mailServerProperties);
MimeMessage generateMailMessage = new MimeMessage(getMailSession);
generateMailMessage.setHeader("Content-Type", "text/plain; charset=UTF-8");
generateMailMessage.setSubject(subject, "UTF-8");
generateMailMessage.setFrom(new InternetAddress(ApiConstant.EMAIL, fromEmail, "UTF-8"));
generateMailMessage.addRecipients(Message.RecipientType.TO, toAddress);
generateMailMessage.addRecipients(Message.RecipientType.CC, ccAddress);
generateMailMessage.addRecipients(Message.RecipientType.BCC, bccAddress);
Multipart multipart = new MimeMultipart();
MimeBodyPart messagePart = new MimeBodyPart();
messagePart.setContent(content, "text/html; charset=UTF-8");
multipart.addBodyPart(messagePart);
generateMailMessage.setContent(multipart);
logger.debug("Create transport");
Transport transport = getMailSession.getTransport("smtp");
transport.connect(HOST, 25, USER, PASS);
transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
transport.close();
这是我的 php 代码,它有效。
$mail = new PHPMailer();
$mail->Host = 'x.x.x.x';
$mail->Port = '25';
$mail->SMTPAuth = true;
$mail->Username = USER;
$mail->Password = PASS;
$mail->From = '.....';
$mail->FromName = '.....';
$mail->setLanguage('vi');
$mail->isHTML(true);
$mail->CharSet = 'UTF-8';
$mail->addAttachment(FILE_NAME);
$mail->addAddress('....');
$mail->Subject ="test";
$mail->Body = "test";
$mail->Body = $body;
请帮帮我。
【问题讨论】:
-
您需要端口 465,而不是端口 25。端口 25 未加密(并且在您的远程邮件服务器上禁用)。
-
会不会是其他程序已经在使用25端口了?
-
在 25 上禁用 SSL 或验证您的提供商是否在端口 465 上有 SSL。