使用apache普通邮件发送多封邮件

时间:2011-07-20 08:57:45

标签: java smtp javamail

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    Connection con=null;
    Statement st=null;
    try{
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    String useq="root";
    String paq="manager";
    String url="jdbc:mysql://localhost:3306/jayna";
    con=DriverManager.getConnection(url,useq,paq);
    st=con.createStatement();


    String q="Select * from appointment where date=curdate()";
    ResultSet rs= st.executeQuery(q);
    String smtpServer="smtp.gmail.com";
    String from="";
    String userName="username";
    String password="password";

    String sub="Appointment Remainder";
    String mailText="This is a remainder message from Jayna Dental Center. Please attend your appointment with us today at your prescribed clinic. Thank you.";

    out.println(mailText); 
               from = userName;
               while(rs.next())
               { 

                   String to="";
                  String pid=rs.getString("pid");
                   String q1="select * from patient where patient_no='"+pid+"'";
                   ResultSet rs1=st.executeQuery(q1);
                   out.println("inside while");
                   if(rs1.next())
                   { 

                   to=rs1.getString("email_id");
                   out.println("inside if");


                        Properties props = System.getProperties();
                        props.put( "mail.smtp.host", smtpServer ) ;
                        out.println("a");
                        //SMTP server authentication is set to false, by default. Setting it to true as shown below
                        props.put( "mail.smtp.auth", "true" ) ;
                        out.println("a");
                        Session session = Session.getDefaultInstance(props, null);
                        MimeMessage message = new MimeMessage(session);
                        out.println("a");
                        //Setting the 'from', 'to', 'cc' addresses and the 'subject'
                        message.setFrom(new InternetAddress(from));
                        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
                        message.setSubject(sub);
                        out.println("a");
                        //Making the mail body as inline and of html type
                        MimeMultipart mp = new MimeMultipart();
                        MimeBodyPart text = new MimeBodyPart();
                        text.setDisposition(Part.INLINE);
                        text.setContent(mailText, "text/html");
                        out.println("a");
                        mp.addBodyPart(text);
                        message.setContent(mp);
                        out.println("a");
                        //SMTP authentication
                        Transport transport = session.getTransport ("smtp") ;
                        transport.connect (smtpServer, userName, password) ;
                        message.saveChanges();
                        out.println("a");
                        transport.sendMessage(message, message.getAllRecipients());
                            transport.close();                          
                        out.println("a");
                        out.println("Your mail has been sent. Please close this window");

                   }  
                   else{
                       out.println("No such pid");
                   }}
               } catch (Exception e){
                        System.err.println("Email could not be sent due to error: "+e);
                        e.printStackTrace();  
                        out.println("ex");
                }

}

/**
 * Initialization of the servlet. <br>
 *
 * @throws ServletException if an error occurs
 */
public void init() throws ServletException {
    // Put your code here
}

您好我一直在尝试使用上面的代码向所有预约日期为今天的人发送邮件。 我收到了错误     运输运输= session.getTransport(“smtp”);     transport.connect(smtpServer,userName,password);

请告诉我这段代码有什么问题.. :( 我已经使用了很多out.println来测试我的代码在哪里工作。

Stack trace 
    Email could not be sent due to error: com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. u6sm22896pbh.0

com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. u6sm22896pbh.0

    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
    at mail.Sendmail.doPost(Sendmail.java:134)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

3 个答案:

答案 0 :(得分:2)

我的预测:发生异常是因为您需要通过TLS验证与gmail的连接。

将以下行添加到您的属性中:

props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");

然后打开你的会话并像这样运输:

Session session = Session.getInstance(props);
Transport transport = session.getTransport("smtp");
transport.connect(D_HOST, D_PORT, D_USER, D_PASS);

显然使用您自己的帐户名,密码等:)

希望这有帮助!

答案 1 :(得分:0)

我可以在这里看到两个问题。

  1. 在问题标题中,您已将apache commons发送给电子邮件,但您的代码使用的是标准JavaMail。如果可以,我建议使用Commons Email
  2. GMail使用TLS,即安全连接。您无法以标准方式连接到它。
  3. 换句话说,我认为您的代码没有任何问题,但是您不应该真正连接到GMail才能发送邮件。如果您的公司有SMTP服务器,我会改用它。

    如果失败,您可以使用Java Email Server

    如果您真的必须使用GMail的SMTP,或者通常使用安全(TLS)连接的SMTP, this article解释了如何做到这一点。

答案 2 :(得分:0)

gmail smtp服务器的端口是465,所以你应该:

1,添加

props.put("mail.smtp.port", "465");

2,更新

transport.connect (smtpServer, 465, userName, password);