`
十井_
  • 浏览: 54776 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java邮件开发(4)_邮件开发中问题汇总

阅读更多

本文包含四部分,一、直接发送一封现有的邮件文件 二、在Web应用中增加邮件发送功能 三、使用JavaMail进行邮件开发的一些技巧 四、编码过程中遇到的异常及解决

一、直接发送一封现有的邮件文件

要求:直接发送系列3中生成的demo3.eml.

 

代码如下:

 

package info.zoio.javamail;

import java.io.FileInputStream;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;

public class Demo4 {
	public static void main(String[] args) {
		Properties props = new Properties();
		props.setProperty("mail.smtp.auth", "true");
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.host", "smtp.126.com");
		//props.setProperty("mail.port", "25");
		
		Session session = Session.getInstance(props,
				new Authenticator() {	//策略模式
					protected PasswordAuthentication getPasswordAuthentication(){
						return new PasswordAuthentication("java_mail_test", "h123456");
					}
				});
		session.setDebug(true);
		
		try {
			/*
			Message msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress("java_mail_test@126.com"));
			msg.setSubject("JavaMail API");
			msg.setRecipients(Message.RecipientType.TO, 
					InternetAddress.parse("java_mail_test@126.com,java_mail_test@yeah.net"));
			msg.setContent("<span style='color:red'>JavaMail开发测试</span>","text/html;charset=GBK");
			
			Transport.send(msg);*/
			
			Message msg = new MimeMessage(session, new FileInputStream("F:\\Java邮件\\demo3.eml"));
			Transport.send(msg);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

二、在Web应用中增加邮件发送功能(源码见附件)

新建Web工程JavaMailWeb.

1.普通方式

直接使用SendMailServlet调用Demo4类的main方法.

 

说明:部署到tomcat时需要添加mail.jar和activation.jar

 

2.用tomcat支持的JNDI资源方式

步骤:

        a.配置JNDI资源;

        b.将mail.jar拷贝到<tomcat_home>/common/lib目录下(jdk1.6以下版本需要添加activation.jar)

        c.在java程序中使用JNDI API获取mail的session对象

 

 

a.根据tomcat帮助文档,在WebRoot/META-INF文件夹下创建context.xml

添加如下内容

<Context>

        <!-- JNDI -->

        <Resource name="mail/Session" auth="Container"

                type="javax.mail.Session"

                mail.smtp.host="smtp.126.com"

                mail.smtp.suth="true"

                mail.transport.protocol="smtp"/>

</Context>

 

 

b.重写SendMailServlet.java

                        Context initCtx = new InitialContext();

                        Context envCtx = (Context) initCtx.lookup("java:comp/env");

                        Session session = (Session) envCtx.lookup("mail/Session");

 

                        Message msg = new MimeMessage(session);

                        msg.setFrom(new InternetAddress("java_mail_test@126.com"));

                        msg.setRecipient(RecipientType.TO, new InternetAddress("java_mail_test@yeah.net"));

                        msg.setSubject("Tomcat JNDI Test");

                        msg.setText("The email which caotains JNDI test is sent by humyna");

 

                        Transport transport = session.getTransport();

                        transport.connect("smtp.126.com",25,"java_mail_test", "h123456");

                        transport.sendMessage(msg,InternetAddress.parse("java_mail_test@yeah.net"));

                        transport.close();

 

c.将mail.jar和activation.jar拷贝到<tomcat_home>/common/lib目录下。(并删除掉WebRoot/WEB-INF/lib下的两个jar包)

 

 

三、使用JavaMail进行邮件开发的一些技巧

1.解决附件中中文显示的问题,使用工具类进行编码

attch1.setFileName(MimeUtility.encodeText("attach1哈哈.txt"));

 

2.如何在程序中设置默认回信地址

msg.setReplyTo(new Address[]{new InternetAddress("test@621.com")});

 

3.关于收件邮箱油耗显示收发件人的名称

 

msg.setFrom(new InternetAddress(" \" " + MimeUtility.encodeText("十井") + " \" <java_mail_test@126.com>"));


4.JDK1.6以下需要添加activation.jar

 

 

四、编码过程中遇到的异常及解决

 

1.错误一

 

Exception in thread "main" javax.mail.internet.ParseException: Expected ';', got "/"
        at javax.mail.internet.ParameterList.<init>(ParameterList.java:289)
        at javax.mail.internet.ContentType.<init>(ContentType.java:114)
        at javax.mail.internet.MimeBodyPart.updateHeaders(MimeBodyPart.java:1331)
        at javax.mail.internet.MimeMessage.updateHeaders(MimeMessage.java:2107)
        at javax.mail.internet.MimeMessage.saveChanges(MimeMessage.java:2075)
        at info.zoio.javamail.Demo3.main(Demo3.java:77)

 解决:MimeMultipart msgMultipart = new MimeMultipart("multipart/mixed");

        改为:MimeMultipart msgMultipart = new MimeMultipart("mixed");

 原因:可查看MimeMultipart的构造函数,说的是subtype

 

2.错误二(tomcat支持的JNDI资源方式)

 

java.lang.ClassCastException: javax.mail.Session
        at info.zoio.web.mail.servlets.SendMailServlet.doPost(SendMailServlet.java:54)
        at info.zoio.web.mail.servlets.SendMailServlet.doGet(SendMailServlet.java:33)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1293)
        at java.lang.Thread.run(Unknown Source)
 

 

原因:由于内容中加载了两份mail.jar和activation.jar

解决:需要将web工程lib下的相关包删除

 

 

3.错误三

 

com.sun.mail.smtp.SMTPSendFailedException: 553 authentication is required,smtp4,jdKowED5aUm4YExQXrqGAw--.795S2 1347182776
;
  nested exception is:
        com.sun.mail.smtp.SMTPSenderFailedException: 553 authentication is required,smtp4,jdKowED5aUm4YExQXrqGAw--.795S2 1347182776

        at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2114)
        at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1618)
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1119)
        at javax.mail.Transport.send0(Transport.java:195)
        at javax.mail.Transport.send(Transport.java:124)
        at info.zoio.web.mail.servlets.SendMailServlet.doPost(SendMailServlet.java:64)
        at info.zoio.web.mail.servlets.SendMailServlet.doGet(SendMailServlet.java:33)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
        at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:843)
        at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:679)
        at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1293)
        at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.mail.smtp.SMTPSenderFailedException: 553 authentication is required,smtp4,jdKowED5aUm4YExQXrqGAw--.795S2 1347182776

        at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1625)
        ... 19 more

 

网上说的原因是:

 

1)发件服务器地址与邮件的发件人地址不同

2)发件时使用的登陆发件服务器的用户名和发件人不同,比如你填的发件人是luckphoto@263.net,你却用其它的用户名比如aaachii登陆发件服务器,无论你是否知道aaachii这个账号的密码都会返回上书的验证错误 

3)最简单的情况:你把发件用的密码弄错了

 

 

我的解决方法是(按照上面的方法测试了没什么了帮助):

transport.send(msg,InternetAddress.parse("java_mail_test@yeah.net"));改成

transport.sendMessage(msg,InternetAddress.parse("java_mail_test@yeah.net"));

 

 

(JavaMail实践完)

 

下一步:实现安卓平台邮件收发功能(计划支持gmail\126\163)。

  • JavaMail.7z (303.4 KB)
  • 描述: JavaMail实践代码
  • 下载次数: 32
  • JavaMailWeb.7z (6.7 KB)
  • 描述: Web增加邮件发送功能(两种方式)
  • 下载次数: 18
分享到:
评论

相关推荐

    毕业设计——JAVA语言设计(论文+源码)汇总-共79份.zip

    毕业设计——JAVA语言设计(论文+源码)汇总,共79份。 JAVA物业管理系统设计与实现 超市综合管理信息系统 基于J2EE的B2C电子商务系统开发 基于JAVA CS远程监控系统软件的实现 基于Java ME无线网络移动端的俄罗斯...

    31个java工具类大汇总

    汇总了Java学习开发过程中常用的一些工具类,如字符串处理的StringUtils,日期处理的DateUtils,生成32位不重复的随机数、文件操作,xml操作,文件上传下载,收发邮件等。

    java面试题库2021.pdf

    目录 一、 JavaSE 部分 1、 Java 基础 ①Java 基础部分(基本语法, Java 特性等) ②关键字 ③面向对象 ④集合部分 2、 Java 高级知识 ①线程 ②锁 ...③S2SH 整合开发 ...4、 所有模式汇总 十、 场景题 十一、 UML

    Android开发技巧总汇(续)

    Android开发技巧总汇(续)又收集了两份关于android开发的写技巧知识,主要关于Activity,Context menus,Android自动化测试初探,java mail包实现发Gmail邮件,线程的处理,四种动画等等

    Java数据库编程宝典4

    3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询...

    Java数据库编程宝典3

    3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询...

    java版SVN后台统计程序

    每日变更,锁定混总发送邮件到所有svn用户(使用svnkit开发)用于日常svn汇总和管理。

    Java数据库编程宝典2

    3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询...

    Android开发应用实战详解源代码

    1.3 常见问题汇总 1.4 使用本书的配套实例 1.5 小结 第2章 android开发必备 2.1 android体系结构 2.1.1 各种库和android运行环境 2.1.2 应用程序框架 2.1.3 操作系统层 2.1.4 应用程序 2.2 android应用程序组成 ...

    java软件工程师笔试题及答案-better-developer-quotes::light_bulb:当我问其他开发人员时,我从他们那里得到的答案汇总——“我如何

    java软件工程师笔试题及答案“我如何成为一名更好的开发人员?” 我在现实生活中和通过 React Native 社区遇到了一些了不起的开发人员,我决定问他们, “我如何成为一名更好的开发人员?” 感谢所有花时间热情回答...

    会议通知系统会议通知系统会议通知系统会议通知系统

    (4)学生可通过系统提供的界面提交会议 PPT,大纲交给教师审核。审核通过后所有学生均可查看会议 PPT,大纲。 (5) 教师可通过系统指定学生做会议记录,生成后教师和学生均可查看(6) 研究生秘书可以查看所有教师的会议...

    Java数据库编程宝典1

    3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询...

    jx:基于Java的全栈Web开发课程

    这是一个汇总存储库,由2019年基于Java的全栈Web开发课程组成。 该课程如下所示: Java Servlet / JSP HTML / CSS / JavaScript SpringMVC Sprint Boot Linux 詹金斯 Node.js React 目录结构 前端 Spring...

    java后端源码-kraken:负载测试IDE

    中汇总数据的负载测试分析显示在 Grafana 生成的综合报告中, 使用 Kubernetes 集群的多主机负载注入。 支持和社区 文档 博客 教程 在线聊天 打开并单击需要帮助? 页面右下角的按钮。 视频 电子邮件 联系我们。 ...

    小程序优秀项目源码汇总,每个项目都有图有源码,零基础学微信小程序,小程序表格,小程序视频,小程序视频弹幕,小程序仿天猫大转盘抽奖等源码,小程序云开发,小程序发邮件,小程序支付,微信支付

    5,使用java开发小程序后台: 6,零基础实战入门Java视频: 7,微信小程序消息推送视频: 8,Python爬虫和数据分析视频: 9,3分钟实现微信小程序支付功能: 目录 001,实现底部导航栏和顶部导航栏 002,小程序自学...

    基于jbpm与activiti的工作流平台技术架构介绍

    BPMX3是基于J2EE开源、轻量级的企业业务开发平台,基于代码重用、组件重用、业务逻辑重用、组装重用,结合快速开发平台中的工具,将开发人员从重复的代码编写中解放出来,把更多的精力集中解决客户的业务逻辑处理上...

Global site tag (gtag.js) - Google Analytics