- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要用 JavaMail 发送简单的 html 消息。而当我试图在互联网上寻找一些带有解释的好例子时,接下来的每一个例子都让我更加生气和愤怒。
所有这些愚蠢的示例都包含复制和粘贴的 Java 代码,它们的区别仅在于注释和一个很好的免责声明,即首先您应该配置您的 smtp 和 pop3 服务器。
我知道没有人愿意为某些具体产品做广告,但恕我直言,配置服务器是最难的部分。那么,任何人都可以给我一些关于配置具体服务器(例如 Kerio 或任何其他服务器)的真正有用的信息(没有 Java 代码)吗?
我现在拥有的是下一个异常(exception):
250 2.0.0 Reset state
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1 Relaying to <mymail@mycompany.com> denied (authentication required)
更新。对之前所有文本的简单重新表述是:假设您有 Windows、jdk,没有其他任何东西。你想制作 java 程序并在你的机器上运行它。这个程序应该发送“Hello world!”到您的 gmail 帐户。列出您的步骤。
UPD2。这是代码:
Properties props = new Properties ();
props.setProperty ("mail.transport.protocol", "smtp");
props.setProperty ("mail.host", "smtp.gmail.com");
props.setProperty ("mail.user", "my_real_address_1@gmail.com");
props.setProperty ("mail.password", "password_from_email_above");
Session mailSession = Session.getDefaultInstance (props, null);
mailSession.setDebug (true);
Transport transport = mailSession.getTransport ();
MimeMessage message = new MimeMessage (mailSession);
message.setSubject ("HTML mail with images");
message.setFrom (new InternetAddress ("my_real_address_1@gmail.com"));
message.setContent ("<h1>Hello world</h1>", "text/html");
message.addRecipient (Message.RecipientType.TO,
new InternetAddress ("my_real_address_2@gmail.com"));
transport.connect ();
transport.sendMessage (message,
message.getRecipients (Message.RecipientType.TO));
异常(exception)是:
RSET
250 2.1.5 Flushed 3sm23455365fge.10
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. 3sm23455365fge.10
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1368)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:886)
at com.teamdev.imgmail.MailSender.main(MailSender.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
...
最佳答案
如果您正在寻找配置 SMTP 服务器的教程,那么您不应该寻找 JavaMail。只需在您选择的服务器上查找教程(Kerio,例如 ... 或 Exim、SendMail、Apache James、Postfix)或在 Serverfault 上询问.任何兼容 SMTP 的服务器都可以很好地与 JavaMail 配合使用。
或者,您甚至可以使用任何“标准”邮件提供商的基础设施。例如,我使用 Google Apps帐户以及 Google 的 SMTP 基础设施,以便从我们的 Java 应用程序发送邮件。 Using a Gmail account如果您不想设置自己的 SMTP 服务器来简单地测试 JavaMail,无论如何这是一个很好的起点。
作为最后一个选项,您甚至可以查找 MX Records域并将您的邮件直接发送到收件人的 SMTP 服务器。有一些常见的陷阱可以解决困难。
作为最后一点,您必须研究如何避免您的邮件被过滤为垃圾邮件 - 这本身就是一个很大的话题。在这里,依赖标准提供商会有所帮助,这些提供商会处理您在托管自己的服务器时可能遇到的一些问题。
顺便说一句:关于您发布的错误消息:SMTP 服务器拒绝中继消息。这是如果您的 SMTP 服务器(认为它)在 example.com 上运行并且您作为 bob@example.net 发送到 alice@example.org,您要求 SMTP 服务器充当中继。这是几年前的常见做法,直到 - 您猜对了 - 被垃圾邮件发送者滥用。从那时起,鼓励邮政局长拒绝转发。您有两个选择:在发送邮件之前进行身份验证或仅发送到托管在您服务器上的帐户(即在 example.com 上,例如 alice@example.com)。
编辑:
这里有一些代码可以帮助您开始使用 authenticationg(适用于 Gmail 帐户,但也适用于您自己的服务器)
private Session createSmtpSession() {
final Properties props = new Properties();
props.setProperty("mail.smtp.host", "smtp.gmail.com");
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", "" + 587);
props.setProperty("mail.smtp.starttls.enable", "true");
// props.setProperty("mail.debug", "true");
return Session.getDefaultInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("john.doe@gmail.com", "mypassword");
}
});
}
关于java - 如何配置环境以使用JavaMail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1946032/
在发布之前,我在互联网上阅读了很多内容和建议的问题,但找不到任何适合我的内容。 有关使用 gmail 的 JavaMail 常见问题解答 Stackoverflow 问题 JavaMail 教程 Go
我正在尝试通过 java 邮件发送电子邮件。它给出了以下异常javax.mail.internet.ParseException: 在 Content-Type string 中,预期的 MIME 类
我想从我的 Gmail 帐户的特定文件夹中获取最近未读的具有特定主题的电子邮件。我正在使用 JavaMail API,如下所示,但它返回 0 个结果。但是,如果我只单独使用 subjectTerm,我
我正在开发一个基于 Spring 的网络应用程序,当用户输入他的电子邮件和密码进行注册时我想验证它们并向他发送电子邮件。我已经使用 java mail api并正确设置gmail smtp。 这是我的
我试图获取我的 Gmail 的所有邮件,但只能获取 250 封。根据 https://javaee.github.io/javamail/FAQ#gmailsettings ,我已经将邮件数量限制设置
我有几封主题为报告 #123:来自测试的“Email_test_856” 的电子邮件。我尝试使用 JavaMail API 根据关键字 Email_test 查找邮件,但它不会过滤掉任何邮件。 这是我
我有一种方法可以发送 HTML 电子邮件和嵌入的图片,以引用我的计算机中的图像,例如 c:/image.gif 该方法效果很好,但我不知道如何添加位于远程计算机中的图像,我知道您的 IP 地址和图像所
这是我的代码,它应该会收到未读消息。然而,它正在返回我收件箱中的最后一条消息。有什么建议吗? import javax.mail.*; import javax.mail.internet.*; im
Javax邮件版本使用1.6.2 手动设置 JavaMailSender 我尝试使用 mail.smtp.timeout 和 mail.smtps.timeout 超时。 而且,我尝试使用字符串和整数
我有以下问题:我的电子邮件客户端使用 Javamail,可以获取电子邮件的所有部分,如发送日期、主题、发件人、收件人等,但我不知道如何获取邮件正文. 我已经尝试过 getContent() 函数,但它
我编写了一个使用 JavaMail API 发送 gmail 的程序。以下是我的代码: import java.util.*; import javax.mail.*; import javax.ac
所以我的问题是关于JavaMail 的。我想向不同的电子邮件地址发送电子邮件,但我希望发件人类似于“noreply”。但是,我似乎无法这样做,因为 JavaMail 需要发送者和接收者都有实际的电子邮
我正在尝试从 Java 应用程序发送电子邮件,但每当我运行在线找到的代码时 here 当我运行代码时,我收到此错误: Exception in thread "main" java.lang.NoCl
所以我遇到了 Javamail 的问题,如果我在邮件中发送附件,正文就会消失。当我不随邮件发送附件时,我只能看到正文。 我的 GMailSender.java: public GMailSender(
我有一个关于 Java Mail 及其如何与流配合使用的问题。在 Java Mail 1.4.1 中,有一个 MimeMessage constructor that accepts a stream
我窃取了这段代码来测试使用 java 发送电子邮件的情况。显然,Javamail 是必需的。由于某种原因,我无法实现 javax.mail。我下载了最新的javamail并将它们放入jdk和jre l
我正在使用 JavaMail 开发一个邮件客户端,它运行良好。现在我希望能够处理传入消息的已读回执。如果传入的邮件 header 包含“Disposition-Notification-To”,我想处
Javamail 在 JUnit 测试和 GlassFish 3.1.2 中工作正常,但在 Tomcat 7.0.41 中不起作用:所有“From” header 均为 NULL!我究竟做错了什么?当
我尝试使用 javamail 连接到电子邮件 - 在非 Android 应用程序中,此代码工作正常: public void perform(View v){ Toast.makeText(g
我必须向多个收件人发送电子邮件。我不希望标题显示完整的收件人列表(即我没有使用“Message.RecipientType.CC”)。如果我使用“Message.RecipientType.BCC”,
我是一名优秀的程序员,十分优秀!