代码:
public static void sendMailAttachments(String mensaje, String cartera, String asunto, String file) throws AddressException, MessagingException, IOException{
//Get user, pass, to
getDatosCorreo();
Properties props = new Properties();
props.put("mail.smtp.port", "465");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getDefaultInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,pass);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(user));
message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to.get(0)));
message.setSubject("Email Subject - Asunto del correo electronico");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Email text Body - Texto o cuerpo del correo electronico");
Multipart multipart = new MimeMultipart();
multipart = addAttachment(multipart, file);
//Setting email text message
multipart.addBodyPart(messageBodyPart);
//set the attachments to the email
message.setContent(multipart);
Transport.send(message);
System.out.println("Correo enviado");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
例外:
GRAVE:无法将 RuntimeException 映射到响应, 重新抛出到 HTTP 容器 java.lang.RuntimeException: javax.mail.MessagingException: 无法连接到 SMTP 主机: 本地主机,端口:465,响应:-1 at 实用。邮件发送邮件附件(邮件.java:128(
如何连接和发送文件?
此代码连接到 Gmail 并发送邮件。
我需要添加一个文件才能发送。
getDatosCorreo();
// TODO Auto-generated method stub
// Step1
System.out.println("n 1st ===> setup Mail Server Properties..");
mailServerProperties = System.getProperties();
mailServerProperties.put("mail.smtp.port", "587");
mailServerProperties.put("mail.smtp.auth", "true");
mailServerProperties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
mailServerProperties.put("mail.smtp.starttls.enable", "true");
System.out.println("Mail Server Properties have been setup successfully..");
// Step2
System.out.println("nn 2nd ===> get Mail Session..");
getMailSession = Session.getDefaultInstance(mailServerProperties, null);
generateMailMessage = new MimeMessage(getMailSession);
for(int i = 0; i < to.size(); i++) {
if(i == 0) {
generateMailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(to.get(i)));
}else {
generateMailMessage.addRecipient(Message.RecipientType.CC, new InternetAddress(to.get(i)));
}
}
generateMailMessage.setSubject(asunto+cartera);
generateMailMessage.setContent(mensaje, "text/html");
System.out.println("Mail Session has been created successfully..");
// Step3
System.out.println("nn 3rd ===> Get Session and Send mail");
Transport transport = getMailSession.getTransport("smtp");
// Enter your correct gmail UserID and Password
// if you have 2FA enabled then provide App Specific Password
transport.connect("smtp.gmail.com", user, pass);
transport.sendMessage(generateMailMessage, generateMailMessage.getAllRecipients());
transport.close();
System.out.println("nn 4rd ===> Send email correctly");
使用带有 SSL 的电子邮件服务时,以下设置对我有用:
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "465");
我不知道您是否需要设置 mail.smtp.ssl.trust
属性。 这个SO答案不需要它,我也没有让它与我的特定SSL电子邮件服务一起工作。