使用apache common mail发送多封邮件
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我的预测:发生异常是因为您需要通过 TLS 验证与 Gmail 的连接。
将以下行添加到您的属性中:
然后打开您的会话并像这样传输:
显然使用您自己的帐户名、密码等。:)
希望这会有所帮助!
How I predicted: The exception occurs because you need to authenticate your connection with gmail through TLS.
Add the following lines to you properties:
Then open your session and transport like this:
Obviously using your own accountname, password etc. :)
Hope this helps!
我在这里可以看到两个问题。
换句话说,我认为您的代码没有任何问题,但是您不应该真正连接到 GMail 来发送邮件。如果您的公司有 SMTP 服务器,我会使用它。
如果失败,您也许可以使用 Java 电子邮件服务器。
如果您确实必须使用 GMail 的 SMTP,或者更一般地说,通过安全 (TLS) 连接使用 SMTP,
这篇文章解释了如何做到这一点。
I can see two issues here.
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.
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);