首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用电子邮件服务器发送电子邮件

不使用电子邮件服务器发送电子邮件
EN

Software Engineering用户
提问于 2014-02-17 20:51:17
回答 3查看 49.4K关注 0票数 12

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

我有一个网站,将发送电子邮件,如果可能的话,我想直接从网站代码发送电子邮件,而不使用电子邮件服务器。JavaMail常见问题解答说,电子邮件服务器是必需的.

是否有一种不用使用电子邮件服务器(使用JavaMail或其他API )来发送电子邮件的方法?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2014-02-17 20:57:11

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

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

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

此外,邮件服务器可以轻松地在一天后再试一次,当远程服务器关闭时,这将降低丢失邮件的风险。

票数 11
EN

Software Engineering用户

发布于 2014-02-17 21:32:39

这完全取决于你所说的“使用”到底是什么意思。

如果“使用”只包括直接使用电子邮件服务器,那么您可以将邮件通过其他类型的服务间接传递给电子邮件服务器。对于实际用例,对我来说,这似乎是一个“足够好的™”解决方案。

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

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

票数 1
EN

Software Engineering用户

发布于 2014-02-25 18:30:11

如果我们必须从Java代码发送邮件给某人,我们需要访问一些邮件服务器凭据。嗯,不总是这样。

Google提供了对其邮件服务器的免费访问,您可以在Java代码中使用它。下面写的代码如果更像是我自己的笔记。所以,如果我有需要的话,你可以在这里参考:http://www.computerbuzz.in/2014/02/how-to-send-email-in-java-using-gmail.html

代码语言:javascript
复制
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.");
    }
}
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/229272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档