[英]Exception occured when mail send with spring
我正在嘗試用Java發送郵件,我用google搜索了它,發現了一段代碼,然后嘗試運行它,但它給了我一個例外:我正在使用Spring Hibernate Integration on Projects。在這項工作中,我有xml文件獲取包含按鈕,控制器和Java類的bean,jsp頁面。
Exception in MAILMAIL.JAVA:org.springframework.mail.MailSendException; nested exceptions (0) are:
10:11:28,979 ERROR [STDERR] org.springframework.mail.MailSendException; nested exceptions (0) are:
10:11:28,979 ERROR [STDERR] at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.j ava:419)
10:11:28,979 ERROR [STDERR] at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.jav a:308)
10:11:28,979 ERROR [STDERR] at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.jav a:297)
10:11:28,979 ERROR [STDERR] at com.sample.other.MailMail.sendMail(MailMail.java:24)
10:11:28,979 ERROR [STDERR] at com.sample.web.MailController.handleRequestInternal(MailController.java:61)
10:11:28,979 ERROR [STDERR] at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractCon troller.java:153)
10:11:28,979 ERROR [STDERR] at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(Simple ControllerHandlerAdapter.java:48)
10:11:28,979 ERROR [STDERR] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.j ava:861)
10:11:28,979 ERROR [STDERR] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.ja va:795)
10:11:28,979 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet .java:476)
10:11:28,979 ERROR [STDERR] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:44 1)
10:11:28,980 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
10:11:28,980 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:290)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain. java:206)
10:11:28,980 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:9 6)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:235)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain. java:206)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:2 35)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:1 91)
10:11:28,980 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociatio nValve.java:190)
10:11:28,980 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
10:11:28,980 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(Security ContextEstablishmentValve.java:126)
10:11:28,980 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityC ontextEstablishmentValve.java:70)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
10:11:28,980 ERROR [STDERR] at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionVa lve.java:158)
10:11:28,980 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109 )
10:11:28,980 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
10:11:28,980 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
10:11:28,980 ERROR [STDERR] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Pr otocol.java:601)
10:11:28,980 ERROR [STDERR] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
10:11:28,980 ERROR [STDERR] at java.lang.Thread.run(Thread.java:745)
10:11:28,980 ERROR [STDERR] Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
nested exception is:
java.net.SocketException: Permission denied: connect
10:11:28,980 ERROR [STDERR] at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
10:11:28,981 ERROR [STDERR] at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
10:11:28,981 ERROR [STDERR] at javax.mail.Service.connect(Service.java:275)
10:11:28,981 ERROR [STDERR] at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.j ava:389)
10:11:28,981 ERROR [STDERR] ... 32 more
10:11:28,981 ERROR [STDERR] Caused by: java.net.SocketException: Permission denied: connect
10:11:28,981 ERROR [STDERR] at java.net.DualStackPlainSocketImpl.connect0(Native Method)
10:11:28,981 ERROR [STDERR] at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79 )
10:11:28,981 ERROR [STDERR] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
10:11:28,981 ERROR [STDERR] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:2 00)
10:11:28,981 ERROR [STDERR] at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
10:11:28,981 ERROR [STDERR] at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
10:11:28,981 ERROR [STDERR] at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
10:11:28,981 ERROR [STDERR] at java.net.Socket.connect(Socket.java:579)
10:11:28,981 ERROR [STDERR] at java.net.Socket.connect(Socket.java:528)
10:11:28,981 ERROR [STDERR] at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:232)
10:11:28,981 ERROR [STDERR] at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
10:11:28,981 ERROR [STDERR] at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
10:11:28,981 ERROR [STDERR] ... 35 more
的index.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Mail A Link</h1>
<form name="mailsend" method="post" action="mailsend.do" id="employeeCreation">
<input type="submit" name="mailbutton" value="SEND LINK" id="mailbutton">
</form>
</body>
</html>
XML:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="requestContextAttribute" value="rc"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="MailController" class="com.sample.web.MailController">
<property name="successView"><value>Home</value></property>
<property name="failedView"><value>../../index</value></property>
<property name="updateView"><value>Home</value></property>
</bean>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="mailsend.do">MailController</prop>
<!-- <prop key="Login.do">UserController</prop> -->
</props>
</property>
</bean>
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="username" value="sender@gmail.com" />
<property name="password" value="sender'spassword" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.socketFactory.port">587</prop>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.
SSLSocketFactory</prop>
<prop key="mail.smtp.port">587</prop>
</props>
</property>
</bean>
<bean id="mailMail" class="com.sample.other.MailMail">
<property name="mailSender" ref="mailSender" />
</bean>
MailController.java:
public ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception
{
try{
Resource r=new ClassPathResource("example-servlet.xml");
BeanFactory b=new XmlBeanFactory(r);
MailMail m=(MailMail)b.getBean("mailMail");
String sender="sender@gmail.com";//write here sender gmail id
String receiver="receiver@gmail.com";//write here receiver id
m.sendMail(sender,receiver,"hi","welcome");
System.out.println("success");
}
catch(Exception e){
System.out.println("An Exception Occured:"+e);
e.printStackTrace();
}
}
MailMail.java:
public void sendMail(String from, String to, String subject, String msg) {
try{
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(msg);
mailSender.send(message);
}catch(Exception e){
System.out.println("Exception in MAILMAIL.JAVA:"+e);
e.printStackTrace();
}
}
請幫我解決問題。我嘗試了google中的很多代碼。最后遇到了同樣的異常:
10:11:28,980 ERROR [STDERR] Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
nested exception is:
java.net.SocketException: Permission denied: connect
10:11:28,980 ERROR [STDERR] at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1282)
10:11:28,981 ERROR [STDERR] at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
10:11:28,981 ERROR [STDERR] at javax.mail.Service.connect(Service.java:275)
10:11:28,981 ERROR [STDERR] at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.j ava:389)
10:11:28,981 ERROR [STDERR] ... 32 more
如果您還有其他方法可以通過spring將消息發送到有效的mailid,請提供代碼。 謝謝
未經身份驗證,不能使用GMail。 您需要使用端口465
而不是587
。
請查看http://email.about.com/od/accessinggmail/f/Gmail_SMTP_Settings.htm
用於從任何電子郵件程序通過Gmail發送郵件的Gmail SMTP服務器設置為:
Gmail SMTP server address: smtp.gmail.com
Gmail SMTP user name: Your full Gmail address (e.g. example@gmail.com)
Gmail SMTP password: Your Gmail password
With Gmail 2-step authentication enabled, use an application-specific Gmail password.
Gmail SMTP port (TLS): 587
Gmail SMTP port (SSL): 465
Gmail SMTP TLS/SSL required: yes
編輯:-
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class JavaEmail {
Properties emailProperties;
Session mailSession;
MimeMessage emailMessage;
public static void main(String args[]) throws AddressException,
MessagingException {
JavaEmail javaEmail = new JavaEmail();
javaEmail.setMailServerProperties();
javaEmail.createEmailMessage();
javaEmail.sendEmail();
}
public void setMailServerProperties() {
String emailPort = "587";//gmail's smtp port
emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", emailPort);
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
}
public void createEmailMessage() throws AddressException,
MessagingException {
String[] toEmails = { "some@emailid.com" };
String emailSubject = "Java Email";
String emailBody = "This is an email sent by JavaMail api.";
mailSession = Session.getDefaultInstance(emailProperties, null);
emailMessage = new MimeMessage(mailSession);
for (int i = 0; i < toEmails.length; i++) {
emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
emailMessage.setContent(emailBody, "text/html");//for a html email
//emailMessage.setText(emailBody);// for a text email
}
public void sendEmail() throws AddressException, MessagingException {
String emailHost = "smtp.gmail.com";
String fromUser = "your emailid here";//just the id alone without @gmail.com
String fromUserEmailPassword = "your email password here";
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromUser, fromUserEmailPassword);
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
System.out.println("Email sent successfully.");
}
}
非常感謝您的深思熟慮的禮物。我成功收到了郵件...我的網絡中存在端口號465的連接問題。今天已解決。
我只是嘗試使用javamail-1.4.5.jar的Java應用程序
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class MailSender
{
final String senderEmailID = "typesendermailid@gmail.com";
final String senderPassword = "typesenderpassword";
final String emailSMTPserver = "smtp.gmail.com";
final String emailServerPort = "465";
String receiverEmailID = null;
static String emailSubject = "Test Mail";
static String emailBody = ":)";
public MailSender(String receiverEmailID, String emailSubject, String emailBody)
{
this.receiverEmailID=receiverEmailID;
this.emailSubject=emailSubject;
this.emailBody=emailBody;
Properties props = new Properties();
props.put("mail.smtp.user",senderEmailID);
props.put("mail.smtp.host", emailSMTPserver);
props.put("mail.smtp.port", emailServerPort);
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.socketFactory.port", emailServerPort);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
SecurityManager security = System.getSecurityManager();
try
{
Authenticator auth = new SMTPAuthenticator();
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
msg.setText(emailBody);
msg.setSubject(emailSubject);
msg.setFrom(new InternetAddress(senderEmailID));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(receiverEmailID));
Transport.send(msg);
System.out.println("Message send Successfully:)");
}
catch (Exception mex)
{
mex.printStackTrace();
}
}
public class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(senderEmailID, senderPassword);
}
}
public static void main(String[] args)
{
MailSender mailSender=new
MailSender("typereceivermailid@gmail.com",emailSubject,emailBody);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.