Rom*_*man 3 java jakarta-mail mail-server
我需要用JavaMail发送简单的html消息.当我试图在互联网上找到一些有解释的好例子时,每个下一个例子都让我更生气和愤怒.
所有这些愚蠢的例子都包含复制和粘贴的Java代码,这些代码仅在注释和一个不错的免责声明中有所不同,首先应该配置你的smtp和pop3服务器.
我知道没有人想为某些具体产品做广告,但配置服务器是最难的部分.那么,任何人都可以给我一些关于配置具体服务器(例如Kerio,或任何其他服务器)的非常有用的信息(没有java代码)吗?
我现在拥有的是下一个例外:
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)
Run Code Online (Sandbox Code Playgroud)
UPD.所有以前的文本的简单重新制定是:想象你有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));
Run Code Online (Sandbox Code Playgroud)
例外是:
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)
...
Run Code Online (Sandbox Code Playgroud)
sfu*_*ger 13
如果您正在寻找配置SMTP服务器的教程,那么您不应该寻找JavaMail.只需在您选择的服务器(Kerio,例如......或Exim,SendMail,Apache James,Postfix)上查找教程或在Serverfault上询问.任何符合SMTP的服务器都可以很好地与JavaMail配合使用.
或者,您甚至可以使用任何"标准"邮件提供商的基础架构.例如,我使用Google Apps帐户和Google的SMTP基础结构从我们的Java应用程序发送邮件.如果您不想设置自己的SMTP服务器以便简单地测试驱动JavaMail,那么使用Gmail帐户无论如何都是一个很好的起点.
作为最后一个选项,您甚至可以查找域的MX记录并将邮件直接发送到收件人的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");
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47138 次 |
| 最近记录: |