Java邮件API不发送电子邮件

时间:2015-10-24 01:01:15

标签: java email gmail javamail

我有一个使用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();
        // ...
    }
}

1 个答案:

答案 0 :(得分:0)

两件事:

正如@Bill Shannon建议的那样,你应该使用Authenticator,而不是单独依赖Properties:

<?php 
$q = $_GET['q'];
showRoadMap($q); ?>

但即使如此,Gmail也会因安全问题阻止您的电子邮件发送,并提供this link以获取更多信息。