我有一个使用Gmail SMTP发送电子邮件的邮件服务类,它已经成功运行到最近,相同的类无法发送电子邮件,我甚至没有看到任何错误消息我调试或运行此代码。任何想法,发生了什么?
public class MailService {
public static void sendEmail(String subject, String msgBody, String[] toEmails,
String[] ccEmails, String[] bccEmails,
String fromEmail, String toName){
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", true); // added this line
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.user", "mygmail-id");
props.put("mail.smtp.password", "mypassword");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", true);
Session session = Session.getInstance(props,null);
List<InternetAddress> toAdresses = null;
List<InternetAddress> ccAdresses = null;
List<InternetAddress> bccAdresses = null;
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(fromEmail));
toAdresses = new ArrayList<InternetAddress>();
ccAdresses = new ArrayList<InternetAddress>();
bccAdresses = new ArrayList<InternetAddress>();
for(String toEmail: toEmails){
toAdresses.add(new InternetAddress(toEmail));
}
if(ccEmails != null && ccEmails.length > 0)
for(String ccEmail: ccEmails){
ccAdresses.add(new InternetAddress(ccEmail));
}
if(bccEmails != null && bccEmails.length > 0)
for(String bccEmail: bccEmails){
bccAdresses.add(new InternetAddress(bccEmail));
}
msg.addRecipients(Message.RecipientType.TO,
toAdresses.toArray(new InternetAddress[toAdresses.size()]));
msg.addRecipients(Message.RecipientType.CC,
ccAdresses.toArray(new InternetAddress[ccAdresses.size()]));
msg.addRecipients(Message.RecipientType.BCC,
bccAdresses.toArray(new InternetAddress[bccAdresses.size()]));
msg.setSubject(subject);
msg.setContent(msgBody, "text/html");
Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
// ...
}
}
答案 0 :(得分:0)
两件事:
正如@Bill Shannon建议的那样,你应该使用Authenticator,而不是单独依赖Properties:
<?php
$q = $_GET['q'];
showRoadMap($q); ?>
但即使如此,Gmail也会因安全问题阻止您的电子邮件发送,并提供this link以获取更多信息。