web-dev-qa-db-ja.com

電子メールサーバーを使用せずに電子メールを送信する

JavaMailは、通常、電子メールプロバイダーのSMTPインターフェイスを介して、電子メールサーバーを使用して電子メールを送信します。メールを送信するためにメールサーバーを使用する必要はありますか?

電子メールを送信するWebサイトがあり、可能であれば、電子メールサーバーを使用せずに、Webサイトのコードから直接電子メールを送信したいと考えています。 JavaMail FAQは、電子メールサーバーが必要であると述べています。

JavaMailまたは別のAPIを使用して、電子メールサーバーを使用せずに電子メールを送信する方法はありますか?

11
Dean Schulze

アドレスのドメインのMXレコードに記載されているSMTPサーバーのいずれかに直接メールを配信できます。通常、それは悪い考えですが、

ローカルサーバーへのメールの配信は高速です。ほとんどすぐに続行して他のことを実行し、サーバーに配信を処理させることができます。

実際の配信には時間がかかる場合があります。たとえば、リモートメールサーバーが遅い可能性があります。または、最初にメールを拒否する可能性があります。スパムに対する既知の戦略で、送信者にメールをもう一度送信するように指示することですが、一部のスパムボットはこれを行いません。

また、メールサーバーは1日後などにリモートサーバーがダウンしたときに簡単に再試行できるため、メールが失われるリスクを軽減できます。

11
johannes

それはすべて、正確に「使用する」という意味に依存します。

「使用」に電子メールサーバーの直接使用のみが含まれる場合、メールを他の種類のサービス間接的にを介して電子メールサーバーに送信することができます。実際の使用例では、これは「Good Enough™」ソリューションのようです。

ただし、質問が文字通り「電子メールサーバーをまったく含まない」を意味する場合、ソフトウェアが何らかの方法でメールをターゲットクライアントの受信トレイに入れることができる場合にのみ可能です。お好みで、ただしPOP3、IMAP、またはメールコンテキストで使用されるその他のメール関連プロトコルを除く(このようなプロトコルを使用する場合、その特定のプログラムはメールサーバーとして機能し、許可されないため)

質問に答えるために:はい。少なくとも理論上は

1
JensG

Javaコードから誰かにメールを送信する必要がある場合、メールサーバーの資格情報にアクセスする必要があります。

Googleはメールサーバーの1つへの無料アクセスを提供しており、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 = { "[email protected]" };
        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 = "[email protected]";
        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
user3350913