Mengirim e-mail tanpa menggunakan server e-mail

11

JavaMail mengirim e-mail menggunakan server e-mail, biasanya melalui antarmuka SMTP dari penyedia e-mail. Apakah perlu menggunakan server email untuk mengirim email?

Saya memiliki situs web yang akan mengirim email dan jika mungkin saya ingin mengirim email langsung dari kode situs web tanpa menggunakan server email. FAQ JavaMail mengatakan bahwa server email diperlukan.

Apakah ada cara untuk mengirim email tanpa menggunakan server email, baik dengan JavaMail atau API lain?

Dean Schulze
sumber
Tidak, itu tidak mungkin. Bagaimana seharusnya klien email mendapatkan email yang Anda kirimi mereka?
Oded
Alternatif, yang tidak akan bekerja dengan JavaMail, adalah dengan mengatur MTA seperti Postfix. Anda tidak akan memerlukan server surat jarak jauh, karena Anda memiliki yang lokal.
user16764
Tepat. Saya kira Anda bisa mengatakan bahwa Microsoft Mail MTA lama adalah "serverless" dalam arti bahwa semua klien Microsoft Mail secara individu berurusan dengan mendapatkan dan menempatkan pesan ke / dari toko surat pusat pada sistem file (pada server file , oleh cara). Tetapi meskipun demikian satu-satunya cara untuk mengirim surat dari sistem itu ke orang lain adalah melalui gateway, yang selalu melibatkan server. Apakah Anda yakin telah mengajukan pertanyaan yang Anda maksudkan?
Craig

Jawaban:

11

Anda dapat mengirim email langsung ke salah satu server SMTP yang disebutkan dalam data MX domain alamat. Biasanya itu adalah ide yang buruk, meskipun:

Mengirim surat ke server lokal cepat - Anda dapat segera melanjutkan dan melakukan sesuatu yang lain dan membiarkan server menangani pengiriman.

Pengiriman aktual dapat memakan waktu, misalnya server surat jarak jauh mungkin lambat. Atau mungkin menolak surat pertama - itu adalah strategi yang dikenal terhadap spam untuk memberitahu pengirim untuk mencoba mengirim email untuk kedua kalinya, yang tidak akan dilakukan beberapa bot spam.

Server surat juga dapat dengan mudah mencoba lagi satu hari kemudian atau lebih ketika server jauh turun, ini mengurangi risiko kehilangan surat.

johannes
sumber
Terima kasih atas informasi mengenai pencegahan spam. Saya bisa melihat bagaimana mengubah strategi ini menggunakan server e-mail ide yang bagus.
Dean Schulze
2
secara teknis, melakukan hal itu mengubah aplikasi Anda menjadi sebuah server surat, jadi Anda masih menggunakan server surat, meskipun yang sederhana.
jwenting
@jwenting bagaimana itu akan menjadi server email jika hanya bertindak sebagai klien yang terhubung ke server lain? Saya lebih suka dianggap sebagai "server" Anda harus memiliki setidaknya satu "klien" terhubung ke Anda ...
Jason Goemaat
Selain itu, mengirim ke server surat jarak jauh langsung dari aplikasi Anda kemungkinan akan bertabrakan dengan cek anti-spam SPF / DMARC.
Craig
1

Itu semua tergantung pada apa yang Anda maksudkan dengan "menggunakan" dengan tepat.

Jika "penggunaan" hanya mencakup penggunaan langsung dari server email, maka Anda dapat mengirimkan email untuk mengirim beberapa jenis layanan lain secara tidak langsung ke server email. Untuk kasus penggunaan praktis, ini tampaknya menjadi solusi "Cukup Baik ™" bagi saya.

Namun, jika pertanyaan Anda secara harfiah berarti " tanpa melibatkan server email sama sekali ", ini hanya mungkin, jika perangkat lunak Anda dapat memasukkan surat ke kotak masuk klien target dengan cara tertentu, tetapi kecuali POP3 atau IMAP atau protokol lain yang relevan dengan email yang digunakan dalam konteks email (karena, jika Anda akan menggunakan protokol semacam itu, program tertentu itu akan bertindak sebagai server surat, yang tidak diperbolehkan)

Untuk menjawab pertanyaan: Ya. Setidaknya secara teori.

JensG
sumber
Saya bertanya apakah saya harus menggunakan server e-mail untuk mengirim e-mail ke server e-mail penerima (2 server e-mail). Saya tertarik mengirim langsung ke server email penerima dari kode saya (1 server email). Saya tidak mencoba mem-bypass server email penerima, hanya server email pengirim.
Dean Schulze
Untuk mengirim email, Anda harus menjadi klien email atau server email. Dalam kebanyakan kasus, untuk mengirim email sebagai klien, Anda harus dipercaya, baik dengan daftar putih atau dengan otorisasi. Untuk mengirim sebagai server, aturan otorisasi seringkali lebih ketat. Ini benar-benar tergantung pada aturan yang digunakan server email penerima untuk mengesahkan pengirim yang valid.
BobDalgleish
@ BobDalgleish: Jika saya dapat mengatur akses ke mesin Anda, saya bisa melakukan apa saja. Termasuk memasukkan surat ke kotak masuk Anda. Saya setuju bahwa ini hanyalah pilihan akademis, tetapi pertanyaannya tidak begitu jelas.
JensG
@DeanSchulze: Saya pikir johannes sudah menjawab pertanyaan itu dan mengapa itu bukan ide yang bagus. Jika saya adalah Anda, saya akan menyukai ide layanan.
JensG
0

Jika kita harus mengirim email kepada seseorang dari kode Java, kita perlu memiliki akses pada beberapa kredensial server email. Ya tidak selalu.

Google telah menyediakan akses gratis ke salah satu server emailnya dan Anda dapat menggunakannya dalam kode Java. Di bawah kode tertulis jika lebih suka catatan untuk diri saya sendiri. Jadi, jika saya membutuhkannya suatu saat, Anda dapat merujuk di sini: 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.");
    }
}
pengguna3350913
sumber