在不使用电子邮件服务器的情况下发送电子邮件


11

JavaMail通常使用电子邮件提供商的SMTP接口使用电子邮件服务器发送电子邮件。是否需要使用电子邮件服务器发送电子邮件?

我有一个可以发送电子邮件的网站,如果可以的话,我想直接从该网站的代码发送电子邮件,而无需使用电子邮件服务器。JavaMail FAQ指出需要电子邮件服务器。

有没有一种方法可以通过JavaMail或其他API使用电子邮件服务器而不发送电子邮件?


不,不可能。电子邮件客户端应该如何获取您发送给他们的电子邮件?
Oded


另一种不一定与JavaMail一起使用的替代方法是设置MTA,例如Postfix。这样,您将不需要远程邮件服务器,因为您有本地邮件服务器。
user16764 2014年

精确地 我想您可以说旧的Microsoft Mail MTA是“无服务器的”,即Microsoft Mail客户端都单独处理从文件系统(在文件服务器上,通过办法)。但是即使那样,将邮件从该系统发送到其他人的唯一方法是通过网关,该网关始终涉及服务器。确定要问您想要的问题吗?
克雷格

Answers:


11

您可以将电子邮件直接传递到地址域的MX记录中提到的SMTP服务器之一。通常这是一个坏主意,尽管:

将邮件传递到本地服务器的速度很快-您几乎可以立即继续执行其他操作,然后让服务器处理传递。

实际的传递可能会花费一些时间,例如远程邮件服务器可能很慢。或者它可能首先拒绝邮件-这是一种针对垃圾邮件的已知策略,可以告诉发件人第二次尝试发送邮件,而有些垃圾邮件机器人则不会这样做。

另外,邮件服务器可以在一天后的某个时间左右轻松重试,因此当远程服务器关闭时,这可以降低丢失邮件的风险。


感谢您提供有关防止垃圾邮件的信息。我可以看到更改这些策略如何使使用电子邮件服务器成为一个好主意。
Dean Schulze 2014年

2
从技术上讲,这样做会将您的应用程序转换为邮件服务器,因此您仍在使用邮件服务器,尽管这简直是白手起家。
jwenting

@jwenting如果仅充当连接到其他服务器的客户端,它将如何成为邮件服务器?我宁愿认为自己是“服务器”,也必须至少有一个“客户端”与您连接...
Jason Goemaat 2014年

另外,直接从您的应用发送到远程邮件服务器可能会违反SPF / DMARC反垃圾邮件检查。
Craig 2014年

1

这完全取决于您确切地“使用”的意思。

如果“使用”仅包括直接使用电子邮件服务器,那么您可能会将邮件传递,以通过某种其他类型的服务间接发送到电子邮件服务器。对于实际使用案例,这对我来说似乎是“ Good Enough™”解决方案。

但是,如果您的问题的字面意思是“ 根本不涉及任何电子邮件服务器 ”,则只有在您的软件能够通过您选择的某种方式将邮件放入目标客户端的收件箱中(POP3除外)时,才有可能或IMAP或电子邮件上下文中使用的任何其他与电子邮件相关的协议(因为如果您使用这样的协议,则该特定程序将充当邮件服务器,这是不允许的)

要回答这个问题:是的。至少在理论上。


我在问是否必须使用电子邮件服务器将电子邮件发送到收件人电子邮件服务器(2个电子邮件服务器)。我有兴趣直接从我的代码(1个电子邮件服务器)发送到收件人电子邮件服务器。我不是在尝试绕过收件人电子邮件服务器,而只是绕过发送电子邮件服务器。
迪恩·舒尔兹2014年

要发送电子邮件,您必须是邮件客户端或邮件服务器。在大多数情况下,要将邮件作为客户端发送,需要通过白名单或授权来获得信任。要作为服务器发送,授权规则通常会更加严格。这实际上取决于收件人的电子邮件服务器用来授权有效发件人的规则。
BobDalgleish 2014年

@BobDalgleish:如果我可以管理对您计算机的访问,则可以执行任何操作。包括将邮件放入收件箱。我同意这只是一个学术选择,但是问题没有那么明确。
JensG 2014年

@DeanSchulze:我想约翰尼斯已经回答了这个特定的问题,以及为什么它不是一个好主意。如果我是你,我将支持服务理念。
JensG 2014年

0

如果必须通过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.");
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.