JavaMail通常使用电子邮件提供商的SMTP接口使用电子邮件服务器发送电子邮件。是否需要使用电子邮件服务器发送电子邮件?
我有一个可以发送电子邮件的网站,如果可以的话,我想直接从该网站的代码发送电子邮件,而无需使用电子邮件服务器。JavaMail FAQ指出需要电子邮件服务器。
有没有一种方法可以通过JavaMail或其他API使用电子邮件服务器而不发送电子邮件?
JavaMail通常使用电子邮件提供商的SMTP接口使用电子邮件服务器发送电子邮件。是否需要使用电子邮件服务器发送电子邮件?
我有一个可以发送电子邮件的网站,如果可以的话,我想直接从该网站的代码发送电子邮件,而无需使用电子邮件服务器。JavaMail FAQ指出需要电子邮件服务器。
有没有一种方法可以通过JavaMail或其他API使用电子邮件服务器而不发送电子邮件?
Answers:
您可以将电子邮件直接传递到地址域的MX记录中提到的SMTP服务器之一。通常这是一个坏主意,尽管:
将邮件传递到本地服务器的速度很快-您几乎可以立即继续执行其他操作,然后让服务器处理传递。
实际的传递可能会花费一些时间,例如远程邮件服务器可能很慢。或者它可能首先拒绝邮件-这是一种针对垃圾邮件的已知策略,可以告诉发件人第二次尝试发送邮件,而有些垃圾邮件机器人则不会这样做。
另外,邮件服务器可以在一天后的某个时间左右轻松重试,因此当远程服务器关闭时,这可以降低丢失邮件的风险。
这完全取决于您确切地“使用”的意思。
如果“使用”仅包括直接使用电子邮件服务器,那么您可能会将邮件传递,以通过某种其他类型的服务间接发送到电子邮件服务器。对于实际使用案例,这对我来说似乎是“ Good Enough™”解决方案。
但是,如果您的问题的字面意思是“ 根本不涉及任何电子邮件服务器 ”,则只有在您的软件能够通过您选择的某种方式将邮件放入目标客户端的收件箱中(POP3除外)时,才有可能或IMAP或电子邮件上下文中使用的任何其他与电子邮件相关的协议(因为如果您使用这样的协议,则该特定程序将充当邮件服务器,这是不允许的)
要回答这个问题:是的。至少在理论上。
如果必须通过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.");
}
}