- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于包含 m.saveChanges()
,以下测试执行大约需要 5 秒。
import org.junit.Before;
import org.junit.Test;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeMessage;
import java.io.IOException;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@Test
public void test1() throws MessagingException, IOException {
Session s = Session.getDefaultInstance(new Properties());
MimeMessage m = new MimeMessage(s);
m.setContent("<b>Hello</b>", "text/html; charset=utf-8");
m.saveChanges();
assertEquals(m.getContent(), "<b>Hello</b>");
assertEquals(m.getContentType(), "text/html; charset=utf-8");
}
我也用 mockito 模拟了 session ,但它没有帮助:
Session s = mock(Session.class);
when(s.getProperties()).thenReturn(new Properties());
这里有什么问题?我可以模拟什么来加快速度?
最佳答案
修复 most common mistakes people make when using JavaMail首先在您的代码中。
DNS lookup可能会损害某些机器的性能。对于 JDK,您可以更改缓存 DNS 查找的安全属性 networkaddress.cache.ttl
and networkaddress.cache.negative.ttl
或设置系统属性 sun.net.inetaddr.ttl
and sun.net.inetaddr.negative.ttl
. JDK 7 及更高版本中的默认行为在缓存方面做得很好,因此您不必更改这些设置。
最好,您可以使用 session 属性来避免这些查找。
mail.from
or mail.host
添加 session 属性(这些确切的键名)因为任何一个属性都会阻止在 InternetAddress.getLocalAddress(Session)
中进行名称查找.这些属性可以附加或不附加它们的对应属性来设置,这些属性在 key 名称中包含协议(protocol)(稍后会详细介绍)。这些属性将提高 MimeMessage.saveChanges()
的性能, MimeMessage.updateHeaders()
, MimeMessage.updateMessageID()
, 和 MimeMessage.setFrom()
全部调用 InternetAddress::getLocalAddress
。如果未设置上述属性,则此方法将尝试查询主机名。通过设置属性,此方法将从 session 中提取主机名字符串,而不是尝试进行昂贵的 DNS 查找。mail.smtp.localhost
or mail.smtps.localhost
设置 session 属性以防止在传输过程中对 HELO 命令进行名称查找。mail.smtp.from
or mail.smtps.from
设置 session 属性防止在传输过程中查找 EHLO 命令。mail.mime.address.usecanonicalhostname
如果您的代码依赖于 setFrom()
,则为 false
但如果您应用第 1 点,这将得到处理。mail.imap.sasl.usecanonicalhostname
or mail.imaps.sasl.usecanonicalhostname
为默认值 false
。由于您没有传输消息,请通过将代码更改为应用规则 #1:
@Test
public void test1() throws MessagingException, IOException {
Properties props = new Properties();
props.put("mail.host", "localhost"); //Or use IP.
Session s = Session.getInstance(props);
MimeMessage m = new MimeMessage(s);
m.setContent("<b>Hello</b>", "text/html; charset=utf-8");
m.saveChanges();
assertEquals(m.getContent(), "<b>Hello</b>");
assertEquals(m.getContentType(), "text/html; charset=utf-8");
}
如果您正在传输消息,那么结合规则#1、#2 和#3 将阻止访问主机系统进行名称查找。如果您想在传输过程中阻止所有 DNS 查找,则必须使用 IP 地址。
关于java - MimeMessage.saveChanges 真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44435457/
我继承的代码库正在打印电子邮件正文中的一些标题信息。这是正在打印的内容: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Co
所以我有一个电子邮件模板,可以完美地发送没有附件的表单。一直在尝试将附件(从临时存储在文件夹中的服务器中获取它们)添加到要通过电子邮件发送的表单中。 我正在使用 Mail.java 类、emailSe
大家好...我希望有人能给我一些关于我遇到的问题的线索。 阅读 MimeMessage 的 getInputStream() 的 Javadoc,它说“返回此消息内容的已解码输入流”然而,这不是我所经
在我的服务器中,我不断收到来自 gmail 的电子邮件。 我以 MimeMessage 类型接收它们。 我目前所做的是使用以下方法提取正文文本: private String getText(Part
如何在java中使用String创建MimeMessage对象 MimeMultipart multiPart = new MimeMultipart(); 并且需要从字符串对象设置内容 最佳答案 此
我一直在寻找和尝试这个,所以我需要你的帮助。我有一个接收 HTML 电子邮件的服务器。之后,我想获取它的各个部分(标题、主题和正文部分)。获取标题和主题没有问题,但内容却有问题。 这是我获取 Smtp
我在编译应用程序时遇到问题,错误是:不兼容的类型:void 无法转换为 javax.mail.internet.MimeMessage 它出现在这部分代码中: getEmailService().pa
使用javax.mail.*时,我尝试发送一条消息,其内容同时以text/plain和text/html<编码。如何将两种编码添加到 MimeMessage 中? setText 是否会覆盖之前的文本
收到错误“方法尚未实现 mimemessage” 尝试发送电子邮件时 protected static void addAtachments(String[] attachments, Mult
我有一个关于邮件发送的项目并且工作没有问题,但我创建了另一个关于邮件发送的项目,生成的 MimeMessage 无法在第一个项目中解析。 我研究了这些类,发现 MimeMessage 的 header
我对 MIME 消息的内容类型感到困惑。假设我有一条 MIME 消息。这是一个多部分的消息,正文部分是这样的 包含纯文本、html 文本的 Mime 正文部分(如一些字母粗体) 第二个包含附件的 mi
我想实际验证消息上设置的字段,如正文、主题、发件人等……我也尝试过做一个参数捕捉器,但没有用,当我调试代码时,消息是获取 javaMailSender.send(message) 行时始终显示空字段。
try ( FileInputStream input = new FileInputStream(source); FileOutputStream
这是Mail类的代码(里面有一个main,但原因很简单,这样解决这个问题似乎很简单): import javax.mail.Message; import javax.mail.MessagingEx
由于包含 m.saveChanges(),以下测试执行大约需要 5 秒。 import org.junit.Before; import org.junit.Test; import javax
我正在阅读这样的 Mime 消息: InputStream is = new FileInputStream("c:\\Temp\\test.eml");
我正在从本地磁盘读取 eml 文件: InputStream is = new FileInputStream(body_path); MimeMessage message = new MimeMe
我用谷歌搜索了一下,看起来设置电子邮件返回路径的标准方法(以便退回到与发件人不同的地址)是通过 Properties 对象,如下所示: Properties prop = new Properties
从我的 previous question 开始,如果我设置 MimeMessage 的正文,附件、正文部分和所有详细信息都会被删除。我该如何解决这个问题? foreach (MimeKit.Mime
我有一个电子邮件原始来源的文本文件(直接从 gmail 复制,如果您单击“查看原始文件”,您会看到它)。我想读入此文件并将其转换为 MimeMessage。 如果您对原因感到好奇,我已经设置了 Jav
我是一名优秀的程序员,十分优秀!