javax.mail.MessaginException:无法连接到SMTP主机:SMTP.gmail.com,端口:465错误
我正在尝试使用带有gmail用户名的smtp连接发送带有attachemetnet的电子邮件。但我无法发送电子邮件,我收到以下错误消息 javax.mail.MessaginException:无法连接到SMTP主机: smtp.gmail.com,端口:465 此外,我还尝试使用587和25个端口作为备选端口。但我也有同样的例外 这是我的密码javax.mail.MessaginException:无法连接到SMTP主机:SMTP.gmail.com,端口:465错误,java,android,smtp,gmail,Java,Android,Smtp,Gmail,我正在尝试使用带有gmail用户名的smtp连接发送带有attachemetnet的电子邮件。但我无法发送电子邮件,我收到以下错误消息 javax.mail.MessaginException:无法连接到SMTP主机: smtp.gmail.com,端口:465 此外,我还尝试使用587和25个端口作为备选端口。但我也有同样的例外 这是我的密码 public class GMailSender extends javax.mail.Authenticator { private St
public class GMailSender extends javax.mail.Authenticator {
private String mailhost = "smtp.gmail.com";
private String user;
private String password;
private Session session;
static {
Security.addProvider(new JSSEProvider());
}
public GMailSender(String user, String password) {
this.user = user;
this.password = password;
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", mailhost);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
props.setProperty("mail.smtp.quitwait", "false");
session = Session.getDefaultInstance(props, this);
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password);
}
public synchronized void sendMail(String subject, String body, String sender, String recipients,
String fileName) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
//DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain", fileName));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
// Create the message part
BodyPart messageBodyPart = new MimeBodyPart();
// Fill the message
messageBodyPart.setText(body);
// Create a multipar message
Multipart multipart = new MimeMultipart();
// Set text message part
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(fileName);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);
// Send the complete message parts
message.setContent(multipart );
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
e.printStackTrace();
}
}
}
这里是JSSEProvider类
public final class JSSEProvider extends Provider {
public JSSEProvider() {
super("HarmonyJSSE", 1.0, "Harmony JSSE Provider");
AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
public Void run() {
put("SSLContext.TLS",
"org.apache.harmony.xnet.provider.jsse.SSLContextImpl");
put("Alg.Alias.SSLContext.TLSv1", "TLS");
put("KeyManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl");
put("TrustManagerFactory.X509",
"org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl");
return null;
}
});
}
}
请告诉我哪里出了问题。为什么不尝试更改
mail.smtp.port
?您可以尝试下载像Thunderbird这样的客户端电子邮件并尝试连接到此smtp url,并检查此凭据是否有效。如果它们有效,那么代码中就存在一些问题。如果失败,说明您的凭据有错误。@ShreeKrishna我应该改成什么?@Seenu69可能是因为防火墙或ISP阻止了该端口。因此,我想建议您搜索一个备选方案。为什么不尝试更改mail.smtp.port
?您可以尝试下载一封类似Thunderbird的客户端电子邮件,并尝试连接到此smtp url,并检查此凭据是否有效。如果它们有效,那么代码中就存在一些问题。如果失败,说明您的凭据有错误。@ShreeKrishna我应该改成什么?@Seenu69可能是因为防火墙或ISP阻止了该端口。所以我想建议寻找一个替代方案。。
GMailSender sender = new GMailSender("email.username@gmail.com", "password");
sender.sendMail("Report - " + storeName, supplierPaymentsSummery,
"email.username@gmail.com", "srinivas@gmail.com",
directory.getAbsolutePath() + "/" + fileName);