我正在尝试编写一个基于参数发送电子邮件的方法,它完全适用于CentOS和OSX。但是,该方法在Windows上无法正常工作(即使在Windows上重新编译)以及其他一些Linux操作系统 - 它会抛出MessagingException。有没有人有任何想法,我如何解决这个问题在Windows上工作?谢谢!
private static void sendEmail(String towhom, String subject, String body) {
String host = "smtp.gmail.com", from = "myemail", pass = "mypassword";
Properties props = System.getProperties();
Scanner scan = new Scanner(System.in);
try {
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress toAddress = new InternetAddress(towhom);
message.addRecipient(Message.RecipientType.TO, toAddress);
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch(AddressException e) {
System.out.println("Invalid Email Address.");
}
catch(MessagingException e) {
System.out.print("\nInvalid Email Address, please reenter it: ");
sendEmail(scan.nextLine(), subject, body);
}
}
答案 0 :(得分:4)
所以是的,当我尝试发送邮件时,Avast Antivirus导致异常被抛出。如果有其他人遇到此问题,他们会找到此页面:
打开Avast并单击“安全”选项卡。然后单击左侧的AntiVirus选项卡。在此下,单击Mail Shield并转到设置。取消“扫描出站邮件(SMTP)”,它就像魅力一样。
答案 1 :(得分:2)
您的代码没有问题。它看起来不错。
根据JavaMail FAQ's。以下可能是问题 -
如果禁用防火墙和/或防病毒无法解决问题,那么您可以尝试重新安装JDK并进行测试。