知识大全 JavaMail常见问题之发送邮件问题

Posted 消息

篇首语:更羡慕街边咖啡座里的目光,只一闪,便觉得日月悠长、山河无恙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JavaMail常见问题之发送邮件问题相关的知识,希望对你有一定的参考价值。

JavaMail常见问题之发送邮件问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  问 我如何回复消息?  答 为了回复消息 请使用 Message 对象上的 reply 方法 这个方法将返回一个新的对象 对象中的标题已经针对回复做了恰当设置 你将需要自己提供消息的内容   问 我如何转发消息?  答 用于转发消息的方法取决于你要怎样表示要转发的消息 简单的办法是创建一个新的 MimeMessage 并适当地为它提供地址 然后将现有的消息作为附件放在新消息中 为了将原始消息放在新消息中 比如可以使用下面的代码     MimeBodyPart mbp = new MimeBodyPart();    mbp setContent(forwardedMsg message/rfc );    mp addPart(mbp);  但是如果你想创建新的消息 并在新消息中包括原始消息的文本 可能也要用 > 来缩进 那将需要提取原始消息主体中的数据 并进行相应的处理 你可能也想取得原始消息的其他附件 并将它们添加到新消息中   问 我如何发送 HTML 邮件?  答 在分发中包括了大量演示程序 它们展示了如何发送 HTML 邮件 如果想发送简单消息 它具有 HTML 而不是纯文本 那请参见 demo(演示)目录中的 send java 程序 如果想将 HTML 文件作为附件发送 请参见 sendfile java 示例 它展示了如何将任何文件作为附件发送   问 我如何发送具有不同字体和颜色的格式化文本的邮件?  答 最简单的办法是使用 HTML 文本发送消息 参见 上面   问 我如何发送具有纯文本和 HTML 文本的邮件 让每个邮件的阅读者可以选择适合它的格式?  答 你想要发送 MIME multipart/alternative 消息 你构造了这样的一条消息 构造方式基本上与构造 multipart/mixed 消息相同 它使用了 MimeMultipart 对象 而该对象又是使用 new MimeMultipart( alternative ) 来构造的 然后在 multipart(多部分)中 把 text/plain 主体部分作为第一部分插入 并且把 text/ 作为第二部分插入 参阅 RFC 获取这一消息的结构的细节   问 我如何发送包含图像的 HTML 邮件?  答 最简单的办法是发送带有图像标签的 HTML 文本 标签引用了公共 Web 站点 在这种方法中 在消息中并没有真正包括图像 因此当用户阅读消息时 如果没有连接到 Internet 那将不能看到图像   另外 你也可以构造 MIME multipart/related 消息 参阅 RFC 获取这种消息结构的细节   问 Transport 方法 send 和 sendMessage 之间有什么区别?  答 send() 方法是一个静态方法 可以直接使用 而不需要 Transport 对象的实例 它用于常见 简单的场合 比如使用默认传输发送单条消息 从内部讲 send() 方法首先调用消息上的 saveChanges() 方法 然后创建合适的新 Transport 对象 调用 Transport 的 connect() 方法 调用 Transport 的 sendMessage() 方法来实际发送消息 接着调用 Transport 的 close() 方法 最后丢弃 Transport 对象的新实例 并由垃圾收集器收集(实际上 还有比那更加复杂的 但那是一般的想法)   如你可以看到 静态 send() 便利 (convenience) 方法是建立在更加通用的每实例 sendMessage() 方法的基础上的 有许多原因可以让应用程序直接使用 sendMessage() 方法 最常见的原因是为了通过在单个连接期间发送多条消息 来提高性能 或者为了手动管理连接以提供验证信息 当使用 sendMessage() 方法时 产生的最常见错误是 忘记在要发送的消息上调用 saveChanges() 方法   问 我需要验证到 SMTP 服务器 因此我调用了 nnect(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() 方法发送消息 但在消息中的文本前后却出现奇怪的一些行 并且我的附件也在消息体中出现   答 通常这些行像下面这样    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 );  nnect();    for (int i = ; )     t sendMessage(msg new Address[] recipients[i] );      t close();    问 当试图发送消息时 我得到了 MessagingException: HELO requires domain address (MessagingException: HELO 要求域地址)   答 在 SMTP HELO 命令中 SMTP 提供程序使用 InetAddress getLocalHost() getHostName() 的结果 如果那个调用不能返回任何数据 就不会在 HELO 命令中发送任何名称 检查你的 JDK 和名称服务器配置 确保那个调用返回正确数据 从 JavaMail 开始 你也可以设置 mail smtp localhost 属性 并可以把设置为想用于 HELO 命令的名称   问 如果将消息发送到错误的地址 为什么我会获得 SendFailedException 或 TransportEvent 指出地址是错误的?  答 在 Internet 上没有端到端验证 通常要将消息转发到几个邮件服务器 然后才到达特定的邮件服务器 该服务器决定了它是否可以传送消息 如果在这些后面的步骤中的某个步骤发生了错误 那么通常会将消息作为不可传送返回给发件人 一个成功的 发送 只表明邮件服务器已经接受了消息 并将试着传送它   问 当消息不能被传送时 就会返回一个失败消息 我如何检测这些 回弹 消息?  答 虽然有一个 Internet 标准用于报告这样的错误(multipart/report MIME 类型 参阅 RFC ) 但还没有广泛实现它 RFC 深入讨论了这个问题 包括了大量的例子   在 Internet 电子邮件中 特定的邮箱或用户名是否存在 只能由传送消息的最终服务器决定 消息可能通过几个中继服务器(它们不能检测错误) 然后再到达最终服务器 通常 当最终服务器检测到这一错误 它会返回一个消息给原始消息的发送人 指出失败的原因 有许多 Internet 标准讨论了这种传送状态通知 (Delivery Status Notifications) 但大量服务器不支持这些新标准 相反使用特别技术来返回这种错误消息 这使得将 回弹 消息与产生问题的原始消息相互关联起来非常困难(注意 这个问题与 JavaMail 完全无关)   有许多技术和试探法用于处理这一问题 但它们都不是完美的 一种技术是 Variable Envelope Return Paths 描述了这一技术   问 当创建 InternetAddress 对象时 如果地址是非法的 为什么不会获得异常?  答 InternetAddress 类只检查地址的语法 如 上面 所讨论 InternetAddress 类不能决定地址是否做为合法地址实际存在 如果应用程序运行在防火墙背后或目前没有连接到 Internet 那么甚至不能验证主机名   问 当试图发送消息时 我为什 cha138/Article/program/Java/JSP/201311/19486

相关参考

知识大全 用JavaMail写简易电子邮件发送系统

用JavaMail写简易电子邮件发送系统  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  

知识大全 JavaMail发送中文邮件中主题乱码的解决方法

JavaMail发送中文邮件中主题乱码的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 Java发送邮件

Java发送邮件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  记得曾经学习用javamail发

知识大全 用javamail显示复合邮件的内容的亲身体会

  复合邮件既含图片又含正文一般是格式显示简单理解的话就是非常漂亮的那种邮件    (个人注解不很全面)        当我们需要做一个收取邮件的程序时我们该如何去显示复合邮件的内容呢?(原问题见专家

知识大全 JavaMail常见问题之applet 中的 JavaMail

JavaMail常见问题之applet中的JavaMail  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ASP.NET 2.0发送电子邮件中存在的问题

ASP.NET2.0发送电子邮件中存在的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在新发行

知识大全 JavaMail常见问题之编程问题

JavaMail常见问题之编程问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问从哪里可以学

知识大全 JavaMail常见问题之POP3问题

JavaMail常见问题之POP3问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问我可以从

知识大全 JAVAMAIL邮件服务器

JAVAMAIL邮件服务器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果你认为没有必要设置

知识大全 使用javamail自动获取gmail邮件

cha138/Article/program/Java/hx/201311/27160