`
十井_
  • 浏览: 55959 次
  • 性别: 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
分享到:
评论

相关推荐

    blackberry java开发相关资料汇总

    在IT行业中,BlackBerry Java开发是一项专为BlackBerry智能手机设计应用程序的技术。这个领域的开发者使用Java Micro Edition (Java ME) 平台,特别是BlackBerry JDE(Java Development Environment)来创建功能丰富...

    基于Javamail的邮件收发系统(系统+论文+开题报告+任务书+外文翻译+文献综述+答辩PPT)

    JavaMail 是一个强大的开源库,专门用于在Java应用程序中处理电子邮件。这个压缩包文件包含了基于JavaMail实现邮件收发系统的完整资源,包括系统代码、学术论文、开题报告、任务书、外文翻译、文献综述以及答辩PPT,...

    Expense-Management-System-In-Java_expensemanagement_DEMO_

    4. **报表生成**:系统能够自动生成支出报表,如按月、按季度或按年统计的收支明细表,以及各类别的支出汇总,帮助用户直观了解财务状况。 5. **预算管理**:用户可以设定个人或部门的预算限制,系统会在超出预算时...

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

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

    31个java工具类大汇总

    以下是对标题“31个java工具类大汇总”及描述中提及的知识点的详细说明: 1. **StringUtils**: `StringUtils`是Apache Commons Lang库中的一个核心工具类,专门用于处理字符串。它提供了大量的静态方法,例如检查...

    Java面向对象程序设计面向对象程序设计_名词解释

    在Java编程语言中,API的应用尤为广泛,比如JDBC、JavaMail等API允许开发者进行数据库操作、发送电子邮件等。 AWT(Abstract Window Toolkit)是Java的一个图形用户界面工具包,它包含了一组丰富的组件(components...

    Java高级面试题汇总及答案(2023年Java面试题及答案大全)

    JDK 代表 Java 开发工具(Java development kit),是 Java 程序的开发工具,如 Java 编译器,它也包含 JRE。JVM 代表 Java 虚拟机(Java virtual machine),它的责任是运行 Java 应用。JIT 代表即时编译(Just In ...

    Java发送邮件遇到的常见需求汇总

    Java发送邮件是开发中常见的需求,特别是在自动化通知、系统报警或者日常沟通中。本文将详细介绍如何使用Java通过SMTP协议发送邮件,并涵盖常见的收件人、...理解并掌握这些基础,将有助于解决大部分Java邮件发送需求。

    SiteFileFetch.rar_Employee_employee schedule_考勤_考勤管理_考勤管理 JAVA

    4. **SiteFileFetch.java**:这是项目中的主要源代码文件,很可能包含了整个考勤管理系统的主逻辑。开发者可能在这里定义了数据结构来存储员工信息、处理签到签退的逻辑以及生成报表的功能。 5. **数据库交互**:...

    java机器学习的常用算法方法汇总

    这些算法在Java中的实现通常需要依赖于开源库,如Weka、MLlib(Spark的一部分)、Deeplearning4j等。开发者可以根据具体需求选择合适的算法和工具,通过Java的丰富库来实现高效且灵活的机器学习应用。 在实际项目中...

    Java 在线考试系统的设计与实现

    总结,Java在线考试系统的设计与实现涵盖了软件工程的多个方面,从需求分析到架构设计,再到核心技术的应用和源代码实现,全面展示了Java在Web开发中的强大能力。通过这个系统,读者不仅可以学习到Java编程,还能...

    java的三大开源框架帮助路径

    根据提供的信息,我们可以推断出该...无论是初学者还是有一定经验的开发者,都可以通过这些资源深入了解框架的使用方法,解决开发过程中遇到的问题,提升自己的技能水平。希望本文能为广大Java开发者带来便利与帮助。

Global site tag (gtag.js) - Google Analytics