使用apache common mail发送多封邮件

发布于 2024-11-24 22:28:26 字数 6002 浏览 0 评论 0原文

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
}

您好,我一直在尝试使用上面的代码向所有预约日期为今天的人发送邮件。 我收到错误 Transport Transport = session.getTransport("smtp") ; Transport.connect (smtpServer, 用户名, 密码) ;

请告诉我这段代码有什么问题..:( 我使用了很多 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)
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
}

Hi i have been trying to use the above code for sending mails to all those people whose appointment date is today.
I am getting an error in
Transport transport = session.getTransport ("smtp") ;
transport.connect (smtpServer, userName, password) ;

Please tell me What is wrong in this code..:(
I have used many out.println just to test till where my code is working.

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

稚气少女 2024-12-01 22:28:26

我的预测:发生异常是因为您需要通过 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);

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

希望这会有所帮助!

How I predicted: The exception occurs because you need to authenticate your connection with gmail through TLS.

Add the following lines to you properties:

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

Then open your session and transport like this:

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

Obviously using your own accountname, password etc. :)

Hope this helps!

┊风居住的梦幻卍 2024-12-01 22:28:26

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

  1. 在问题标题中,您放置了 apache commons email,但是您的代码使用的是标准 JavaMail。如果可以的话,我建议使用 Commons Email
  2. GMail 使用 TLS,即安全连接。您无法以标准方式连接到它。

换句话说,我认为您的代码没有任何问题,但是您不应该真正连接到 GMail 来发送邮件。如果您的公司有 SMTP 服务器,我会使用它。

如果失败,您也许可以使用 Java 电子邮件服务器

如果您确实必须使用 GMail 的 SMTP,或者更一般地说,通过安全 (TLS) 连接使用 SMTP,
这篇文章解释了如何做到这一点。

I can see two issues here.

  1. In the issue title you've put apache commons email, however your code is using standard JavaMail. I would suggest using Commons Email if you can.
  2. GMail uses TLS, i.e. a secure connection. You can't connect to it in the standard way.

In other words, I don't think there's anything wrong with your code, however you should not really be connecting to GMail in order to send mail. If your company has an SMTP server I would use that instead.

Failing that you may be able to use the Java Email Server.

If you really must use GMail's SMTP, or more generally SMTP over a secure (TLS) connection,
this article explains how to do it.

平生欢 2024-12-01 22:28:26

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

1、添加

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

2、更新

transport.connect ( smtpServer, 465, 用户名, 密码);

the port of gmail smtp server is 465, so you should:

1, add

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

2, update

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文