动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息



本月文章推荐
.Java的字符串操作.
.JAVA上加密算法的实现用例(2).
.Enterprise JavaBeans 组件慨述之.
.JAVA几个常见错误简析(下).
.WAP手机上的问卷调查系统的构建.
.面向服务架构(SOA)的原则.
.浅析手机游戏开发与应用的发展趋.
.java之旅(8)复用类 (续).
.应用RMS实现用户自动登陆功能解析.
.SCJP考生的顾虑!.
.使用JDOM操作XML系列文章三 平面.
.AtEndOfLine 属性.
.Javascript实例教程(19) 使用HoT.
.Java违例控制.
.MIN_VALUE 属性.
.JXTA技术与应用发展慨述.
.J2EE开发n层应用.
.Java手机,好一场龙争虎斗.
.使用ant编译打包应用程序.
.Java的数据类型与方法重载.

JavaMail常见问题之发送邮件问题

发表日期:2008-1-5 |



  问. 我如何回复消息?
  答:为了回复消息,请使用 Message 对象上的 reply 方法。这个方法将返回一个新的对象,对象中的标题已经针对回复做了恰当设置。你将需要自己提供消息的内容。
  问. 我如何转发消息?
  答:用于转发消息的方法取决于你要怎样表示要转发的消息。简单的办法是创建一个新的 MimeMessage,并适当地为它提供地址,然后将现有的消息作为附件放在新消息中。为了将原始消息放在新消息中,比如可以使用下面的代码:
    MimeBodyPart mbp = new MimeBodyPart();
    mbp.setContent(forwardedMsg, "message/rfc822");
    mp.addPart(mbp);
  但是假如你想创建新的消息,并在新消息中包括原始消息的文本,可能也要用 "> " 来缩进,那将需要提取原始消息主体中的数据,并进行相应的处理。你可能也想取得原始消息的其他附件,并将它们添加到新消息中。
  问. 我如何发送 Html 邮件?
  答:在分发中包括了大量演示程序,它们展示了如何发送 HTML 邮件。假如想发送简单消息,它具有 HTML 而不是纯文本,那请参见 demo(演示)目录中的 sendhtml.Java 程序。假如想将 HTML 文件作为附件发送,请参见 sendfile.java 示例,它展示了如何将任何文件作为附件发送。
  问. 我如何发送具有不同字体和颜色的格式化文本的邮件?
  答:最简单的办法是使用 HTML 文本发送消息。参见 上面。
  问. 我如何发送具有纯文本和 HTML 文本的邮件,让每个邮件的阅读者可以选择适合它的格式?
  答:你想要发送 MIME multipart/alternative 消息。你构造了这样的一条消息,构造方式基本上与构造 multipart/mixed 消息相同,它使用了 MimeMultipart 对象,而该对象又是使用 new MimeMultipart("alternative") 来构造的。然后在 multipart(多部分)中,把 text/plain 主体部分作为第一部分插入,并且把 text/html 作为第二部分插入。参阅 RFC2046,获取这一消息的结构的细节。
  问. 我如何发送包含图像的 HTML 邮件?
  答:最简单的办法是发送带有图像标签的 HTML 文本,标签引用了公共 Web 站点。在这种方法中,在消息中并没有真正包括图像,因此当用户阅读消息时,假如没有连接到 Internet,那将不能看到图像。
  另外,你也可以构造 MIME multipart/related 消息。参阅 RFC2387,获取这种消息结构的细节。
  问. Transport 方法 send 和 sendMessage 之间有什么区别?
  答:send() 方法是一个静态方法,可以直接使用,而不需要 Transport 对象的实例。它用于常见、简单的场合,比如使用默认传输发送单条消息。从内部讲,send() 方法首先调用消息上的 saveChanges() 方法。然后创建合适的新 Transport 对象,调用 Transport 的 connect() 方法,调用 Transport 的 sendMessage() 方法来实际发送消息,接着调用 Transport 的 close() 方法,最后丢弃 Transport 对象的新实例,并由垃圾收集器收集(实际上,还有比那更加复杂的,但那是一般的想法)。
  如你可以看到,静态 send() 便利 (convenience) 方法是建立在更加通用的每实例 sendMessage() 方法的基础上的。有许多原因可以让应用程序直接使用 sendMessage() 方法。最常见的原因是为了通过在单个连接期间发送多条消息 来提高性能,或者为了手动治理连接以提供验证信息。当使用 sendMessage() 方法时,产生的最常见错误是,忘记在要发送的消息上调用 saveChanges() 方法。
  问. 我需要验证到 SMTP 服务器,因此我调用了 trans.connect(host, user, passWord),然后调用 trans.send(msg) 发送消息,但它却不能工作。
  答:你应该调用 msg.saveChanges(),然后调用 trans.sendMessage(msg, addrs) 来发送消息。如 上面 所描述,send 方法是一个静态便利方法,它会获得自己的 Transport 对象,并创建自己的连接用于发送消息;它没有使用与某些 Transport 对象有关的连接,并且它是通过该 Transport 对象得到调用的。当然不要忘记将 mail.smtp.auth 属性设置为 true 来启用 SMTP 验证!
  问. 我修改了一条消息,但标题却没有反映修改。
  答:在创建新消息或修改现有消息后,应该调用 saveChanges()。这将导致重新设置标题以反映变更。注重,Transport.send(Message) 方法隐式调用了这个方法。因此假如你正在做的是发送已修改的消息,就可以跳过调用 saveChanges()。saveChanges() 可能是一个昂贵的操作(非凡是对于较大或深度嵌套的消息),因此只在需要时才调用它。
  问. 我正在使用 sendMessage() 方法发送消息,但在消息中的文本前后却出现希奇的一些行,并且我的附件也在消息体中出现。
  答:通常这些行像下面这样:
  --928176543.952742998030.JavaMail.name@host
  像 上面 那样,在创建新消息后,在使用 Transport.sendMessage() 方法发送消息之前,必须调用 saveChanges() 方法。静态 Transport.send() 方法将自动调用 Message.saveChanges() 方法。
  问. 我为新消息的 Message-ID 标题设置了特定值。但当我发送这条消息时,却重写了那个标题。
  答:saveChanges() 将为 Message-ID 字段设置新值,重写所设置的任何值。假如需要设置自己的 Message-ID 并保留它,就必须创建自己的 MimeMessage 子类,重写 updateHeaders() 方法,并使用这个子类的一个实例。
  class MyMessage extends MimeMessage {
    ...
  
    protected void updateHeaders() throws MessagingException {
   super.updateHeaders();
   setHeader("Message-ID", "my-message-id");
    }
    ...
  }
  
  问. 当发送创建的新消息时,为什么会得到 UnsupportedDataTypeException?
  答:你可能使用 setContent(Object o, String type) 方法设置了消息的一些内容。为了让它能工作,必须为指定“类型”注册 JAF DataContentHandler。假如不这样做,将获得 UnsupportedDataTypeException。参阅 JAF 文档,获取进一步信息。
  问. 当发送消息时,如何能够显式地设置 SMTP FROM: 属性?
  答:mail.smtp.from 属性可用于设置 SMTP FROM: 属性。假如没有设置这个属性,就使用消息的 From 属性。假如多个线程需要同时发送邮件,并且每个线程需要设置 From 属性,那么每个线程就必须使用自己的 Session 对象,它具有自己的 Properties 对象。然后可以在每个 Session 对象的 各个 Properties 对象上独立设置 mail.smtp.from 属性(同样对每个线程做这样的设置)。
  问. 我想重复发送消息,并且每次发送给一组不同的收件人。但调用 Transport.send(Message) 却导致每次都创建一个新的 Transport 会话。在本例中,这是一个次优办法,我如何来解决它?
  答:创建合适的 Transport 对象的实例,然后连上它并重复调用 sendMessage() 方法,例如:
  MimeMessage msg = ...;
  // constrUCt message
  msg.saveChanges();
  Transport t = session.getTransport("smtp");
  t.connect();
  
  for (int i = 0; .....) {
    t.sendMessage(msg, new Address[] { recipients[i] });
  }
  
  t.close();
  
  问. 当试图发送消息时,我得到了 “MessagingException: 501 HELO requires domain address”(MessagingException: 501 HELO 要求域地址)。
  答:在 SMTP HELO 命令中,SMTP 提供程序使用 InetAddress.getLocalHost().getHostName() 的结果。假如那个调用不能返回任何数据,就不会在 HELO 命令中发送任何名称。检查你的 JDK 和名称服务器配置,确保那个调用返回正确数据。从 JavaMail 1.1.3 开始,你也可以设置 mail.smtp.localhost 属性,并可以把设置为想用于 HELO 命令的名称。
  问. 假如将消息发送到错误的地址,为什么我会获得 SendFailedException 或 TransportEvent,指出地址是错误的?
  答:在 Internet 上没有端到端验证。通常要将消息转发到几个邮件服务器,然后才到达特定的邮件服务器,该服务器决定了它是否可以传送消息。假如在这些后面的步骤中的某个步骤发生了错误,那么通常会将消息作为不可传送返回给发件人。一个成功的“发送”只表明邮件服务器已经接受了消息,并将试着传送它。
  问. 当消息不能被传送时,就会返回一个失败消息。我如何检测这些“回弹”消息?
  答:虽然有一个 Internet 标准用于报告这样的错误(multipart/report MIME 类型,参阅 RFC1892),但还没有广泛实现它。RFC1211 深入讨论了这个问题,包括了大量的例子。
  在 Internet 电子邮件中,特定的邮箱或用户名是否存在,只能由传送消息的最终服务器决定。消息可能通过几个中继服务器(它们不能检测错误),然后再到达最终服务器。通常,当最终服务器检测到这一错误,它会返回一个消息给原始消息的发送人,指出失败的原因。有许多 Internet 标准讨论了这种传送状态通知 (Delivery Status Notifications),但大量服务器不支持这些新标准,相反使用非凡技术来返回这种错误消息。这使得将“回弹”消息与产生问题的原始消息相互关联起来非常困难(注重,这个问题与 JavaMail 完全无关)。
  有许多技术和试探法用于处理这一问题,但它们都不是完美的。一种技术是 Variable Envelope Return Paths,http://cr.yp.to/proto/verp.txt 描述了这一技术。
  问. 当创建 InternetAddress 对象时,假如地址是非法的,为什么不会获得异常?
  答:InternetAddress 类只检查地址的语法。如 上面 所讨论,InternetAddress 类不能决定地址是否做为合法地址实际存在。假如应用程序运行在防火墙背后或目前没有连接到 Internet,那么甚至不能验证主机名。
  问. 当试图发送消息时,我为什

上一篇:JavaMail常见问题之编程问题 人气:520
下一篇:JavaMail常见问题之一般问题 人气:355
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-9 顶级域名交易系统 v3.0 完整版
2008-7-9 ACTCMS网站管理系统 v2.0 Build
2008-7-9 Roclog v3.1.4 build 20080706
2008-7-9 乐彼网上开店系统(56770 Eshop)
2008-7-9 深度学习alexa排名提升专家 v1.0
2008-7-9 BBSXP 2008 Build 8.0.5 正式版
2008-7-9 一句话快速信息发布系统 修正完美
2008-7-9 ACTCMS网站管理系统 v2.0 Build
2008-7-9 乐涛涛留言本 08版
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報