2012-04-22 8 views
0

java를 사용하여 메일을 보내려고했습니다. 내가 Gmail의 SMTP 서버 ("smtp.gmail.com")와 함께 사용할 때 사용했던 코드가 작동했습니다. 그러나 ISP (ISP 제공자)의 SMTP 서버를 통해 전자 메일을 보내도록 코드 (smtp_host_name, smtp_port 속성 및 인증 UserID/Pwd)를 변경하면이 코드가 실패합니다.java에서 메일을 보내는 중 오류가 발생했습니다.

은 여기 내 코드 -

String host = "smtp server host of my isp provider"; 

    Properties props = System.getProperties(); 
    props.put("mail.smtp.host", host); 
    props.put("mail.debug", "true"); 
    props.put("mail.transport.protocol.", "smtp"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "25"); 
    props.put("mail.smtp.starttls.enable","true"); 

    Session mailSession = Session.getDefaultInstance(props, null); 
    mailSession.setDebug(sessionDebug); 

    Message msg = new MimeMessage(mailSession); 
    msg.setFrom(new InternetAddress(from)); 
    InternetAddress[] address = {new InternetAddress(to)}; 
    msg.setRecipients(Message.RecipientType.TO, address); 
    msg.setSubject(subject); 
    msg.setContent(messageText, "text/html"); 

    Transport transport = mailSession.getTransport("smtp"); 
    transport.connect(host, user, pass); 

내가이 문제는 내가 내 시스템의 작업 공간에서 동일한 코드에서 메일을 보낼 수 있어요입니다

javax.mail.MessagingException: Exception reading response; 
nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

오류 - 얻고있다. 하지만 호스트에 war 파일을 업로드 한 후에 위의 오류가 발생합니다. 나는 SSL을 비활성화했지만 여전히이 오류가 발생한다고 생각합니다. 누군가 제발 도와 줄 수 있어요. 그것의 긴급한 ...

나는 아래에 주어진 단계를 따라 갔지만 여전히 같은 오류가 발생합니다. 여기

String host = "mail.myweb.com", user = emailUser, pass = emailPasswd; 

    String to = emailID; 
    String from = emailFrom; 
    String subject = subj; 
    String messageText = message; 
    boolean sessionDebug = true; 

    Properties props = System.getProperties(); 
    props.put("mail.smtp.host", host); 
    props.put("mail.debug", "true"); 
    props.put("mail.transport.protocol", "smtp"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "25"); 

    Session mailSession = Session.getDefaultInstance(props, null); 
    mailSession.setDebug(sessionDebug); 

    Message msg = new MimeMessage(mailSession); 
    msg.setFrom(new InternetAddress(from)); 
    InternetAddress[] address = {new InternetAddress(to)}; 
    msg.setRecipients(Message.RecipientType.TO, address); 
    msg.setSubject(subject); 
    msg.setContent(messageText, "text/html"); 

    Transport transport = mailSession.getTransport("smtp"); 
    transport.connect(host, user, pass); 

    try { 
     transport.sendMessage(msg, msg.getAllRecipients()); 
    } 
    catch (Exception e) { 
     System.out.println("Error" + e.getMessage()); 
    } 
    transport.close(); 
} 

전체 스택 트레이스

javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 
com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1611) 
com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1369) 
com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) 
javax.mail.Service.connect(Service.java:288) 
javax.mail.Service.connect(Service.java:169) 
common.sendMail.(sendMail.java:35) 
frontend.reply.sendfeedback(reply.java:74) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243) 
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) 
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488) 
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) 
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) 
org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776) 
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705) 
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898) 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) 
java.lang.Thread.run(Thread.java:662) 
+0

비 SSL 연결에서 오류와 똑같이 SSL을 사용하려고합니다. 귀하의 마지막 속성은 명시 적으로 그렇게합니다. –

+0

마지막 속성을 제거했지만 여전히 작동하지 않습니다 .... –

+0

@BhaskarSharma 내 대답을 확인하십시오. –

답변

2

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

이 연결에 SSL을 가능하게되고이 선은 지금 - 다음은 내 코드입니다; 대신 거짓으로 만들거나 그냥 꺼내십시오.

또한이 속성 이름의 끝에있는 점은 있지만 아마 무해한, 의심스러운 :

props.put("mail.transport.protocol.", "smtp"); 
+0

고마워, 내가 이것을 시도하고 알려 드리겠습니다 ... –

+0

안녕, 나는 그것을 시도했지만 여전히 작동하지 않습니다. 이유를 이해할 수 없습니다. –

+0

아무도 도와 줄 수 있습니까? –

0

당신은 smtps 프로토콜과 함께 Transport 개체를 얻을 필요가있다. Java Mail API 버전 1.4.1 이상을 사용하십시오.
이전 버전에서 지원되는지 확실하지 않습니다.

# JavaMail SMTP provider Sun Microsystems, Inc 
protocol=smtp; type=transport; class=com.sun.mail.smtp.SMTPTransport; vendor=Sun Microsystems, Inc; 
protocol=smtps; type=transport; class=com.sun.mail.smtp.SMTPSSLTransport; vendor=Sun Microsystems, Inc; 

# JavaMail IMAP provider Sun Microsystems, Inc 
protocol=imap; type=store; class=com.sun.mail.imap.IMAPStore; vendor=Sun Microsystems, Inc; 
protocol=imaps; type=store; class=com.sun.mail.imap.IMAPSSLStore; vendor=Sun Microsystems, Inc; 

당신이 메일 세션 객체를 생성 할 때 이러한 리소스가로드 :
smtp.jarimap.jar 각각 다음과 같은 항목으로 javamail.providers라는 리소스 파일이 포함되어 있습니다. 우리는 smtps 프로토콜을 사용하도록 com.sun.mail.smtp.SMTPSSLTransport의 인스턴스를 얻을 필요가

DEBUG: JavaMail version 1.4.5 
DEBUG: URL jar:file:/E:/Ravi/work/eclipse-workspace/temp/WebContent/WEB-INF/lib/smtp.jar!/META-INF/javamail.providers 
DEBUG: successfully loaded resource: jar:file:/E:/Ravi/work/eclipse-workspace/temp/WebContent/WEB-INF/lib/smtp.jar!/META-INF/javamail.providers 
DEBUG: Tables of loaded providers 
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc]} 
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsy stems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc]} 

다음과 같이 DEBUG 추적이다. 자원이 프로토콜에 대해 정의 된 공급자가 기본

Transport transport = mailSession.getTransport("smtps"); 

, Transport 목적은 예외없이 생성된다.

DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc] 

모든 입력이 맞으면 성공할 것입니다.샘플 실행에 DEBUG는 다음과 같습니다 :

DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true 
220 mx.google.com ESMTP d2sm12188996pbw.39 
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465 

EHLO sreekarreddy 
250-mx.google.com at your service, [117.195.223.189] 
250-SIZE 35882577 
250-8BITMIME 
250-AUTH LOGIN PLAIN XOAUTH 
250 ENHANCEDSTATUSCODES 
DEBUG SMTP: Found extension "SIZE", arg "35882577" 
DEBUG SMTP: Found extension "8BITMIME", arg "" 
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH" 
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
DEBUG SMTP: Attempt to authenticate 
DEBUG SMTP: check mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed 
DEBUG SMTP: AUTH LOGIN succeeded 
DEBUG SMTP: use8bit false 
MAIL FROM:<[email protected]> 
250 2.1.0 OK d2sm12188996pbw.39 
RCPT TO:<[email protected]> 
250 2.1.5 OK d2sm12188996pbw.39 
DEBUG SMTP: Verified Addresses 
DEBUG SMTP: [email protected] 
DATA 
354 Go ahead d2sm12188996pbw.39 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: test email over smtps 
MIME-Version: 1.0 
Content-Type: text/html; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

hello world 
. 
250 2.0.0 OK 1335124739 d2sm12188996pbw.39 
QUIT 
221 2.0.0 closing connection d2sm12188996pbw.39 
2

안녕 예를 들어 비 SSL의 SMTP 연결

props.put("mail.smtp.starttls.enable","false"); 
    props.put("mail.smtp.socketFactory.port", "25"); 
    props.put("mail.smtp.socketFactory.class", ""); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

에 대해 다음 속성을 추가하려고 SSL 연결 속성이

Properties props = new Properties(); 
    props.put("mail.smtp.username", "[email protected]"); 
    props.put("mail.smtp.password", "password"); 
    props.put("mail.smtp.protocol", "smtp"); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.port", "587"); 
    props.put("mail.smtp.starttls.enable","true"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.socketFactory.port", "587"); 
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

입니다 비 SSL 속성은

입니다.
Properties props = new Properties(); 
    props.put("mail.smtp.user", "[email protected]"); 
    props.put("mail.smtp.password", "password"); 
    props.put("mail.smtp.protocol", "smtp"); 
    props.put("mail.smtp.host", "smtp.mydomain.com"); 
    props.put("mail.smtp.port", "25"); 
    props.put("mail.smtp.starttls.enable","false"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.socketFactory.port", "25"); 
    props.put("mail.smtp.socketFactory.class", ""); 
    props.put("mail.smtp.socketFactory.fallback", "false"); 
관련 문제