По какой-то причине следующий полностью работающий код при странных обстоятельствах вызова не работает должным образом во всех случаях. Например, он отправляет встроенное изображение как вложение при вызове из других программ.
Поскольку я строю его вслепую, исходя из интуиции, взяв за основу фрагменты кода, я подозреваю, что структура созданного электронного письма недостаточно надежна. или, в лучшем случае, не следуя никаким рекомендациям.
Может ли кто-нибудь проверить правильность структуры электронного письма, созданного с помощью этого кода, например, указанный ответ в здесь , или какая модификация будет Вы представляете, чтобы улучшить структуру?
Заранее спасибо.
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeBodyPart;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
public class Test {
private Properties emailProperties;
private Session mailSession;
private MimeMessage emailMessage;
public String[] toEmails={"Admin <admin@example.com>"};
public String emailSubject="Subject";
public String emailBody="";
public String htmlText= "Subject<br>";
public String txtContentID="<image1>";
public String txtImage="Example.png";
public String emailHost="example.com";
public String fromUser="admin@example.com";
public String fromUserEmailPassword="mypassword";
public String sPort="587";
public String sXMailer="Example";
public String sMID="20200618235959.00.admin@example.com";
public String fromEmail="admin@example.com";
public String fromName="Admin";
public String sReturnEmail="Admin <admin@example.com>";
public String[] txtAttachment = {"File.txt"}; //PROBLEM??
public String[] txtAttachmentName = {"File.txt"};
public static void main(String args[]) throws AddressException,
MessagingException {
System.out.println("Test");
SendEmail javaEmail = new SendEmail();
javaEmail.send();
}
public void send() throws AddressException,
MessagingException {
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port",sPort);
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
if (!(toEmails==null))
for (int i=0;i<toEmails.length;i++){
emailMessage.addRecipient(Message.RecipientType.TO,
new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
emailMessage.setHeader("X-Mailer",sXMailer);
emailMessage.setHeader("Return-path",sReturnEmail);
emailMessage.setHeader("Return-Path",sReturnEmail);
emailMessage.setHeader("Envelope-from",sReturnEmail);
try {
emailMessage.setFrom(new InternetAddress(fromEmail,fromName));
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
MimeMultipart multipart = new MimeMultipart("related");
BodyPart messageBodyPart1 = new MimeBodyPart();
messageBodyPart1.setContent(htmlText, "text/html; charset=utf-8");
messageBodyPart1.setDisposition(MimeBodyPart.INLINE);
multipart.addBodyPart(messageBodyPart1);
BodyPart messageBodyPart2 = new MimeBodyPart();
DataSource fdsImage = new FileDataSource(txtImage);
messageBodyPart2.setDataHandler(new DataHandler(fdsImage));
messageBodyPart2.setHeader("Content-ID",txtContentID);
messageBodyPart2.setDisposition(MimeBodyPart.INLINE);
multipart.addBodyPart(messageBodyPart2);
MimeMultipart multipart2 = new MimeMultipart();
BodyPart rbp = new MimeBodyPart();
rbp.setContent(multipart);
multipart2.addBodyPart(rbp);
for (int i=0;i<txtAttachment.length;i++){
BodyPart messageBodyPart3 = new MimeBodyPart();
DataSource fdsAttachment = new FileDataSource(txtAttachment[i]);
messageBodyPart3.setDataHandler(new DataHandler(fdsAttachment));
messageBodyPart3.setFileName(txtAttachmentName[i]);
messageBodyPart3.setDisposition(MimeBodyPart.ATTACHMENT);
multipart2.addBodyPart(messageBodyPart3);
}
emailMessage.setContent(multipart2);
System.out.println("Sending Email...");
Transport transport=mailSession.getTransport("smtp");
transport.connect(emailHost,fromUser,fromUserEmailPassword);
emailMessage.saveChanges();
emailMessage.setHeader("Message-ID",sMID);
transport.sendMessage(emailMessage,emailMessage.getAllRecipients());
transport.close();
}
}