JavaMail使用电子邮件服务器发送电子邮件,通常通过电子邮件提供商的SMTP接口发送。是否有必要使用电子邮件服务器发送电子邮件?
我有一个网站,将发送电子邮件,如果可能的话,我想直接从网站代码发送电子邮件,而不使用电子邮件服务器。JavaMail常见问题解答说,电子邮件服务器是必需的.
是否有一种不用使用电子邮件服务器(使用JavaMail或其他API )来发送电子邮件的方法?
发布于 2014-02-17 20:57:11
您可以将电子邮件直接传递到地址域MX记录中提到的SMTP服务器之一。不过,这通常是个坏主意:
将邮件发送到本地服务器是快速的--您几乎可以立即继续执行其他操作,并让服务器处理传递。
实际传递可能需要一些时间,例如远程邮件服务器可能比较慢。或者,它可能首先拒绝邮件--这是一种已知的防止垃圾邮件的策略,它告诉发件人尝试第二次发送邮件,而一些垃圾邮件机器人不会这样做。
此外,邮件服务器可以轻松地在一天后再试一次,当远程服务器关闭时,这将降低丢失邮件的风险。
发布于 2014-02-17 21:32:39
这完全取决于你所说的“使用”到底是什么意思。
如果“使用”只包括直接使用电子邮件服务器,那么您可以将邮件通过其他类型的服务间接传递给电子邮件服务器。对于实际用例,对我来说,这似乎是一个“足够好的™”解决方案。
但是,如果您的问题的字面意思是“根本不涉及任何电子邮件服务器”,这将是可能的,如果您的软件能够以某种方式将邮件放入目标客户端的收件箱,但除了POP3或IMAP或电子邮件上下文中使用的任何其他电子邮件相关协议(因为,如果您使用这样的协议,该特定程序将充当邮件服务器,这是不允许的)。
来回答这个问题:是的。至少在理论上。
发布于 2014-02-25 18:30:11
如果我们必须从Java代码发送邮件给某人,我们需要访问一些邮件服务器凭据。嗯,不总是这样。
Google提供了对其邮件服务器的免费访问,您可以在Java代码中使用它。下面写的代码如果更像是我自己的笔记。所以,如果我有需要的话,你可以在这里参考:http://www.computerbuzz.in/2014/02/how-to-send-email-in-java-using-gmail.html
private void setMailServerProperties()
{
Properties emailProperties = System.getProperties();
emailProperties.put("mail.smtp.port", "586");
emailProperties.put("mail.smtp.auth", "true");
emailProperties.put("mail.smtp.starttls.enable", "true");
mailSession = Session.getDefaultInstance(emailProperties, null);
}
private MimeMessage draftEmailMessage() throws AddressException, MessagingException
{
String[] toEmails = { "computerbuzz@gmail.com" };
String emailSubject = "Test email subject";
String emailBody = "This is an email sent by http://www.computerbuzz.in.";
MimeMessage emailMessage = new MimeMessage(mailSession);
/**
* Set the mail recipients
* */
for (int i = 0; i < toEmails.length; i++)
{
emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
}
emailMessage.setSubject(emailSubject);
/**
* If sending HTML mail
* */
emailMessage.setContent(emailBody, "text/html");
/**
* If sending only text mail
* */
//emailMessage.setText(emailBody);// for a text email
return emailMessage;
}
private void sendEmail() throws AddressException, MessagingException
{
/**
* Sender's credentials
* */
String fromUser = "user-email@gmail.com";
String fromUserEmailPassword = "*******";
String emailHost = "smtp.gmail.com";
Transport transport = mailSession.getTransport("smtp");
transport.connect(emailHost, fromUser, fromUserEmailPassword);
/**
* Draft the message
* */
MimeMessage emailMessage = draftEmailMessage();
/**
* Send the mail
* */
transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
transport.close();
System.out.println("Email sent successfully.");
}
}https://softwareengineering.stackexchange.com/questions/229272
复制相似问题