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


11

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

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

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


いいえ、できません。電子メールクライアントは、送信する電子メールをどのように取得することになっていますか?
オデッド


JavaMailで必ずしも機能するとは限らない代替手段は、PostfixなどのMTAをセットアップすることです。ローカルサーバーがあるため、リモートメールサーバーは必要ありません。
user16764 14

正確に。古いMicrosoft Mail MTAは、Microsoft Mailクライアントがすべて個別にファイルシステム上の中央メールストアへのメッセージの送受信を処理するという意味で「サーバーレス」であったと言うことができると思います(ファイルサーバー上で仕方)。しかし、それでも、そのシステムから他の誰かにメールを送信する唯一の方法は、常にサーバーを含むゲートウェイを経由することでした。あなたが意図した質問をしたことがありますか?
クレイグ14

回答:


11

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

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

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

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


スパム防止に関する情報をありがとう。これらの戦略を変更することで、電子メールサーバーをどのように活用するのが良いかがわかります。
ディーンシュルツェ14

2
技術的には、これを行うとアプリケーションがメールサーバーに変わるため、かなり単純なものではありますが、まだメールサーバーを使用しています。
ジュウェンティング14

@jwenting他のサーバーに接続するクライアントとしてのみ機能する場合、メールサーバーはどのようになりますか?私はむしろ...あなたへの接続少なくとも1つの「クライアント」でなければならなかった「サーバ」であると考えられ
ジェイソンGoemaat

また、アプリから直接リモートメールサーバーに送信すると、SPF / DMARCスパム対策チェックが実行されない可能性があります。
クレイグ14

1

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

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

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

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


受信者の電子メールサーバー(2つの電子メールサーバー)に電子メールを送信するために電子メールサーバーを使用する必要があるかどうかを尋ねています。私のコード(1つの電子メールサーバー)から受信者の電子メールサーバーに直接送信することに興味があります。受信者の電子メールサーバーではなく、送信側の電子メールサーバーをバイパスしようとはしていません。
ディーンシュルツェ14

電子メールを送信するには、メールクライアントまたはメールサーバーである必要があります。ほとんどの場合、クライアントとしてメールを送信するには、ホワイトリストまたは許可によって信頼される必要があります。サーバーとして送信するには、多くの場合、承認規則がより厳密になります。実際には、受信者の電子メールサーバーが有効な送信者を承認するために使用するルールに依存します。
BobDalgleish 14

@BobDalgleish:あなたのマシンへのアクセスを管理できれば、何でもできます。メールを受信トレイに入れることを含みます。これは単なる学術的な選択肢であることに同意しますが、質問の範囲はそれほど明確ではありませんでした。
JensG 14

@DeanSchulze:ヨハネスはすでにその特定の質問に答えており、なぜそれがそんなに良い考えではないのかと思います。もし私があなたなら、私はサービスのアイデアを好むでしょう。
JensG 14

0

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 = { "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.");
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.