使用java通过Exchange服务器发邮件时,在内网可以正常发送,但是不能发往互联网邮箱,错误代码如下:

严重: Servlet.service() for servlet jspthrew exception
com.sun.mail.smtp.SMTPSendFailedException: 501 5.1.7 Invalid address

atcom.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1333)
       at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:906)
       atcom.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:535)
       attest.jmail.ExchangeMail.send(ExchangeMail.java:72)
       atorg.apache.jsp.index_jsp._jspService(index_jsp.java:67)
       atorg.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
       atjavax.servlet.http.HttpServlet.service(HttpServlet.java:820)
       atorg.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
       atorg.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
       atorg.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
       atjavax.servlet.http.HttpServlet.service(HttpServlet.java:820)
       at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
       atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
       atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
       atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
       atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
       atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
       atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
       atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
       at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
       atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
       atorg.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
       at java.lang.Thread.run(Thread.java:619)

程序代码如下:

public void addMail() throws AddressException, MessagingException{
              Properties props = System.getProperties();
              props.put("mail.smtp.host", "10.2.32.145");
              props.put("mail.transport.protocol", "smtp");
          props.put("mail.smtp.auth", "true");  
          Email_AutherticatorBean auth = new Email_AutherticatorBean("zhq.hao@cbhb.com.cn","Password02!");

for(int i=0;i<1;i++){

Session mailSession = Session.getInstance(props, auth);
                      Message msg =  new MimeMessage(mailSession);
                      //发件人邮箱
                      msg.setFrom(new InternetAddress("han.huang@cbhb.com.cn"));

//收件人邮箱地址
                      InternetAddress[] address = null;
                      address = InternetAddress.parse("test_bohai@163.com",false);
                      msg.setRecipients( Message.RecipientType.TO, address);

String temp = "内容内容";

msg.setSubject("主题haha"+(i+1));                              
                      msg.setSentDate(newDate());                           
                      msg.setText(temp);

//                     Transport.send(msg);
                      SMTPTransport t = (SMTPTransport) mailSession.getTransport("smtp");
                      try {
                              if (true)
                                      t.connect("10.2.32.145", "cbhb/zhq.hao","Password02!");
                              else
                                      t.connect();
                              t.sendMessage(msg, msg.getAllRecipients());
                      } finally {
                              t.close();
                      }
              }

}
经过分析后,发现代码需要简单修改,修改后如下:

DEBUG: setDebug: JavaMail version 1.3.1

DEBUG: getProvider() returningjavax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,SunMicrosystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: useEhlotrue, useAuth true DEBUG SMTP: trying to connect to host "10.2.32.145",port 587

220 BHDCPEXGAP03.cbhb.root.cbhbank.netMicrosoft ESMTP MAIL Service ready at Mon, 25 Nov 2013 17:10:15 +0800 DEBUGSMTP: connected to host "10.2.32.145", port: 587

EHLO cbhb-4bcb3aa917

250-BHDCPEXGAP03.cbhb.root.cbhbank.netHello [10.16.73.99] 250-SIZE 10485760 250-PIPELINING 250-DSN250-ENHANCEDSTATUSCODES 250-AUTH GSSAPI NTLM LOGIN 250-8BITMIME 250-BINARYMIME

250 CHUNKING

DEBUG SMTP: Found extension"SIZE", arg "10485760"

DEBUG SMTP: Found extension"PIPELINING", arg ""

DEBUG SMTP: Found extension "DSN",arg ""

DEBUG SMTP: Found extension"ENHANCEDSTATUSCODES", arg ""

DEBUG SMTP: Found extension"AUTH", arg "GSSAPI NTLM LOGIN"

DEBUG SMTP: Found extension"8BITMIME", arg ""

DEBUG SMTP: Found extension"BINARYMIME", arg ""

DEBUG SMTP: Found extension "CHUNKING",arg ""

DEBUG SMTP: Attempt to authenticate

AUTH LOGIN

334 VXNlcm5hbWU6

aGFuLmh1YW5n

334 UGFzc3dvcmQ6

UGFzc3dvcmQwMyE=

235 2.7.0 Authentication successful

DEBUG SMTP: use8bit false

MAIL FROM:<han.huang@cbhb.com.cn>

250 2.1.0 Sender OK

RCPT TO:<eidolond@gmail.com>

250 2.1.5 Recipient OK

DEBUG SMTP: Verified Addresses

DEBUG SMTP:eidolond@gmail.com

DATA

354 Start mail input; end with<CRLF>.<CRLF>

Message-ID: <17514905.1385370503062.JavaMail.a@cbhb-4bcb3aa917>

From: han.huang@cbhb.com.cn

To: eidolond@gmail.com

Subject: =?GBK?B?suLK1NPKvP4=?=

Mime-Version: 1.0

Content-Type: text/plain; charset=GBK

Content-Transfer-Encoding: base64

suLK1NPKvP4=

.

250 2.6.0 <17514905.1385370503062.JavaMail.a@cbhb-4bcb3aa917>[InternalId=1322968] Queued mail for delivery QUIT

其中最重要的问题是,我的邮件服务器上为了配合其他应用开启了匿名访问,然而这段程序中用的是验证身份的方式,在通过邮件服务器时,服务器认为是匿名发送,导致不能发往外网。我把代码中smtp用的端口25改为587就好使了。还有一个方法是专门为这个java发送服务器开启中继也可以,一定是只针对这个java服务器的IP而不是针对所有的中继。

本文转自legendfu51CTO博客,原文链接:http://blog.51cto.com/legendfu/1331493 ,如需转载请自行联系原作者

java发送邮件问题相关推荐

  1. 用java发送邮件(黄海已测试通过)

    /*** java发送带附件的邮件* 周枫* 2013.8.10*/ package com.dsideal.Util; import javax.mail.*; import javax.mail. ...

  2. Java发送邮件(带附件)

    实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...

  3. 手把手教你实现Java发送邮件(1)-发送简单的文本

    说明:本博客已经收藏至我的gitee中的code_demo仓库(点击此链接跳转)中,且gitee中有相应的代码~ 欢迎访问~~ 不仅仅是code,还有一些通俗的讲解哦~ 文章目录 一.Java实现邮件 ...

  4. 手把手教你用java发送邮件

    手把手教你用java发送邮件 一.学习目的 1.学会用jmail发送邮件 2.学会自动发送邮件需要的一些设置 二.准备内容(以163邮箱示范) 1.个人邮箱 首先登录163个人邮箱,然后在个人页面-设 ...

  5. 简易的定时发送生日邮件功能(Listener+定时器+使用java发送邮件)

    实现功能主要技术点: Listener(监听器) 使用Java发送邮件(JavaMail的使用) 代码示例 创建web工程,写一个监听器监听ServletContext对象的创建(创建时机:启动服务器 ...

  6. 【Java学习笔记】38.Java 发送邮件

    Java 发送邮件 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) . 您 ...

  7. java 发送邮件和读取邮件(163邮箱为例)

    1,发送邮件 (1)在设置里面打开163邮箱的smtp.pop3,设置授权码 (2)在引用pom.xml中引用mail.jar <dependency > <groupId > ...

  8. Java发送邮件时标题和发件人乱码

    最近碰到一个问题,Java发送邮件时,本地没有问题,测试服务器也没问题,但上线后邮件的标题和发件人乱码,正文OK 通过翻阅资料,原因及解决方法如下: 原因: 当一段 Text 或者 HTML 通过电子 ...

  9. Java发送邮件中文乱码问题

    使用Java发送邮件,会出现在windows环境中无任何问题,在linux环境中会出现标题.或者附件名称中文乱码问题.可以在程序中加入下面代码块解决. static {// 解决邮件标题.附件名称中文 ...

  10. Java发送邮件详解

    Java发送邮件详解 本期我们学习Java如何发送邮件,Java发送邮件是以后工作较为常用的一个Java技能,想Web的邮箱验证.邮件提醒等功能,后期我也会编写一个教务的成绩提醒系统,其中,提醒的功能 ...

最新文章

  1. Makefile中的几个调试方法
  2. 详解Azure的权限控制
  3. java中包的_Java中的包
  4. hdu1007 最近点对
  5. Shiro总是将我重定向到login.jsp
  6. 努力一下,还是可以成为技术美术(TA)的
  7. MySQL优化器cost计算
  8. stm32标准外设库和芯片资料下载地址
  9. dataframe数据标准化处理_数据处理中的标准化、归一化究竟是什么?
  10. 可是听了半天C++五子棋
  11. linux中的管道和重定向
  12. MSN Messenger协议
  13. 麦子学院与阿里云战略合作 在线教育领军者技术实力被认可
  14. 蓝桥杯嵌入式备赛手册
  15. 概率论基础知识(一)概率论基本概念
  16. AI改写人类起源:黑猩猩并不是我们的祖先!
  17. 记录,Cents 7 更改home和root的中文路径
  18. 黑马优购uni-app
  19. 追根溯源 | 带你了解现代机械设计团队的机械设计协作方式
  20. 机器学习算法系列之K近邻算法

热门文章

  1. Html怎么判断ie5,css怎样判断IE浏览器?
  2. memmove函数c语言实现,【C语言】实现memcopy、memmove函数
  3. 什么样的语言可以进行反编译
  4. [计算几何]Last Stardust
  5. 怎么才能写好技术文档?这是我的全部经验
  6. python 制作正态分布图,画出拒绝域
  7. python 拉丁超立方抽样
  8. 贝叶斯法则的举例分析
  9. 基于Java毕业设计校园社团管理平台演示录像2021源码+系统+mysql+lw文档+部署软件
  10. 八位硕博大佬的百度之旅~