java 服务器发送邮件失败,在Java中发送邮件时出现错误

本文档描述了尝试使用Java通过ISP提供商的SMTP服务器发送邮件时遇到的错误。问题在于代码在本地工作正常,但在上传到服务器后抛出了`javax.mail.MessagingException`,伴随着`SSLException: Unrecognized SSL message, plaintext connection?`。作者尝试禁用SSL并设置非SSL连接属性,但问题仍然存在。博客内容详细列出了代码示例和堆栈跟踪,寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

I was trying to send mail using java. The code i was using worked when I used it with GMail's SMTP server ("smtp.gmail.com"). But when I changed the code (smtp_host_name, smtp_port properties and authentication UserID/Pwd) to send email through the SMTP server of my ISP provider, this code failed.

Here is my code-

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);

And i am getting this error-

javax.mail.MessagingException: Exception reading response;

nested exception is: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

The problem is i am able to send mails from the same code from my system workspace. But after i upload the war file to host, i get the above error. I think i disabled SSL but still getting this error. Can someone please help. Its urgent...

I followed the steps given below but still i am getting the same error.

Here is my code now-

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();

}

Here is the full stacktrace

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)

解决方案

Hi try to add following properties for non ssl smtp connection

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");

for example the ssl connection properties are

Properties props = new Properties();

props.put("mail.smtp.username", "email@gmail.com");

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");

Non ssl properties are

Properties props = new Properties();

props.put("mail.smtp.user", "email@mydomain.com");

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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值