簡體   English   中英

用spring發送郵件時發生異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM