Criei um código para enviar e-mails com texto e anexo, porém, ao executar, a exceção IOException aparece mesmo tendo um arquivo(a mensagem que aparece é “IOException wilhe sending message”). Poderiam ajudar?
[CODE]
public void enviarComArquivo(File arquivo, String titulo, String descricaoEmail, String destinatario,
String copia) {
final String email = "email@email.com.br";
final String password = "senha";
String host = "smtp";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "porta");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email, password);
}
});
try {
MimeMessage message = new MimeMessage(session);
MimeBodyPart mbp = new MimeBodyPart();
Multipart mp = new MimeMultipart();
message.setFrom(new InternetAddress(email));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copia));
message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse("copia.oculta@copiaoculta.com.br"));
message.setSubject(titulo);
message.setText(descricaoEmail);
DataSource file = new FileDataSource(arquivo.getName());
message.setDisposition(Part.ATTACHMENT);
message.setDataHandler(new DataHandler(file));
message.setFileName(file.getName());
mp.addBodyPart(mbp);
message.setContent(mp);
Transport.send(message);
} catch (MessagingException me) {
JOptionPane.showMessageDialog(null, me.getMessage());
}
}
Posta a exceção completa.
Diz o seguinte:
javax.mail.MessagingException: IOException while sending message;
nested exception is:
java.io.IOException: No MimeBodyPart content at com.sun.mail.smtp.SMTPTransport.sendMessage
Ao realizar o envio o valor de descricaoEmail está null? Pelo que li, tem que mandar pelo menos uma string vazia como corpo da mensagem.
De todos os parâmetros, o único que tem algo ‘null’ é o filePath do arquivo. e dos restante, MimeBodyPart.
Consegui resolver a exceção ao adicionar “mbp.attachFile(arquivo);” no código, porém no e-mail mostra apenas o arquivo e não o texto (descricaoEmail) junto.
[CODE]
public void enviarComArquivo(File arquivo, String titulo, String descricaoEmail, String destinatario,
String copia) {
final String email = "email@email.com.br";
final String password = "senha";
String host = "smtp";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "porta");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email, password);
}
});
try {
MimeMessage message = new MimeMessage(session);
MimeBodyPart mbp = new MimeBodyPart();
Multipart mp = new MimeMultipart();
message.setFrom(new InternetAddress(email));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copia));
message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse("copia.oculta@copiaoculta.com.br"));
message.setSubject(titulo);
message.setText(descricaoEmail);
DataSource file = new FileDataSource(arquivo.getName());
message.setDisposition(Part.ATTACHMENT);
message.setDataHandler(new DataHandler(file));
message.setFileName(file.getName());
mbp.attachFile(arquivo);
mp.addBodyPart(mbp);
message.setContent(mp);
Transport.send(message);
} catch (MessagingException me) {
JOptionPane.showMessageDialog(null, me.getMessage());
}
}
1 curtida
Tente adicionar o texto do email como outro bodypart:
MimeBodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText(descricaoEmail);
//...
mp.addBodyPart(textBodyPart);
Obrigado @Lucas_Camara! Resolveu meu problema! Segue o código finalizado e funcional:
public void enviarComArquivo(File arquivo, String titulo, String descricaoEmail, String destinatario,
String copia) {
final String email = "email@email.com.br";
final String password = "senha";
String host = "smtp";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "porta");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email, password);
}
});
try {
MimeMessage message = new MimeMessage(session);
MimeBodyPart mbp = new MimeBodyPart();
Multipart mp = new MimeMultipart();
MimeBodyPart textBodyPart = new MimeBodyPart();
message.setFrom(new InternetAddress(email));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(destinatario));
message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copia));
message.setRecipients(Message.RecipientType.BCC, InternetAddress.parse("copia.oculta@copiaoculta.com.br"));
message.setSubject(titulo);
textBodyPart.setText(descricaoEmail);
mp.addBodyPart(textBodyPart);
DataSource file = new FileDataSource(arquivo.getName());
message.setDisposition(Part.ATTACHMENT);
message.setDataHandler(new DataHandler(file));
message.setFileName(file.getName());
mbp.attachFile(arquivo);
mp.addBodyPart(mbp);
message.setContent(mp);
Transport.send(message);
} catch (MessagingException me) {
JOptionPane.showMessageDialog(null, me.getMessage());
}
}
1 curtida