E-posta sunucusu kullanmadan e-posta gönderme


11

JavaMail e-postaları, genellikle bir e-posta sağlayıcısının SMTP arabirimi aracılığıyla bir e-posta sunucusu kullanarak gönderir. E-posta göndermek için e-posta sunucusu kullanmak gerekli mi?

E-posta gönderecek bir web sitem var ve mümkünse e-postaları bir e-posta sunucusu kullanmadan doğrudan web sitesi kodundan göndermek istiyorum. JavaMail SSS, bir e-posta sunucusunun gerekli olduğunu söylüyor.

JavaMail veya başka bir API ile e-posta sunucusu kullanmadan e-posta göndermenin bir yolu var mı?


Hayır, bu mümkün değil. E-posta istemcilerinin gönderdiğiniz e-postayı nasıl alması gerekir?
Oded


JavaMail ile çalışmayacak bir alternatif de Postfix gibi bir MTA oluşturmaktır. Yerel bir sunucunuz olduğundan uzak posta sunucusuna ihtiyacınız olmayacaktır.
user16764

Tam. Eski Microsoft Mail MTA, Microsoft Mail istemcilerinin dosya sistemindeki (bir dosya sunucusunda , dosya sunucusundaki) merkezi posta deposuna / iletilerini almak ve tek tek iletmekle ilgili olarak "sunucusuz" olduğunu söyleyebilirim . yön). Ancak o zaman bile, bu sistemi başka birinin postalarına almanın tek yolu, her zaman sunucuları içeren bir ağ geçidi idi. İstediğiniz soruyu sorduğunuzdan emin misiniz?
Craig

Yanıtlar:


11

Adres alan adının MX kaydında belirtilen SMTP sunucularından birine doğrudan bir e-posta gönderebilirsiniz. Yine de, bu kötü bir fikirdir:

Postayı yerel bir sunucuya teslim etmek hızlıdır - hemen hemen devam edebilir ve başka bir şey yapabilir ve sunucunun teslimatı gerçekleştirmesine izin verebilirsiniz.

Gerçek teslimat biraz zaman alabilir, örneğin uzak posta sunucusu yavaş olabilir. Veya ilk önce postayı reddedebilir - bir gönderene posta göndermeyi ikinci kez denemesini söylemek için spam'a karşı bilinen bir stratejidir, bazı spam botlar bunu yapmaz.

Ayrıca, posta sunucusu bir gün sonra kolayca tekrar deneyebilir, bu nedenle uzak sunucu kapalıyken, posta kaybı riski azalır.


Spam önleme ile ilgili bilgiler için teşekkürler. Bu stratejileri değiştirmenin bir e-posta sunucusunu nasıl iyi bir fikir haline getirdiğini görebiliyorum.
Dean Schulze

2
teknik olarak, bunu uygulamanızı bir posta sunucusuna dönüştürür, bu yüzden hala çıplak bir kemik olsa da bir posta sunucusu kullanıyorsunuz.
jwenting

@jwenting Yalnızca diğer sunuculara bağlanan bir istemci gibi davranıyorsa posta sunucusu nasıl olurdu? En azından bir "istemci" bağlanmak zorunda bir "sunucu" olduğunu düşündüm ...
Jason Goemaat

Ayrıca, uzak posta sunucularına doğrudan uygulamanızdan göndermenin SPF / DMARC istenmeyen posta önleme kontrollerini gerçekleştirmesi muhtemeldir.
Craig

1

Her şey tam olarak "kullan" ile ne demek istediğinize bağlıdır.

"Use" yalnızca bir e-posta sunucusunun doğrudan kullanımını içeriyorsa, e-posta sunucusuna dolaylı olarak başka bir tür hizmet üzerinden göndermek için postayı iletebilirsiniz . Pratik kullanım durumlarında bu benim için bir "Good Enough ™" çözümü gibi görünüyor.

Bununla birlikte, sorunuz tam anlamıyla " hiçbir e-posta sunucusunu içermeden " anlamına geliyorsa, bu yalnızca yazılımınız postayı seçtiğiniz istemcinin gelen kutusuna koyabiliyorsa, ancak POP3 hariç mümkün olabilir. veya IMAP veya e-posta bağlamında kullanılan başka bir e-posta ile ilgili protokol (çünkü böyle bir protokol kullanırsanız, söz konusu programın izin verilmeyen posta sunucusu olarak işlev görmesi gerekir)

Soruyu cevaplamak için: Evet. En azından teoride.


E-postayı alıcıların e-posta sunucusuna (2 e-posta sunucusu) göndermek için bir e-posta sunucusu kullanmam gerekip gerekmediğini soruyorum. Kodumdan (1 e-posta sunucusu) doğrudan alıcıların e-posta sunucusuna göndermek istiyorum. Alıcıların e-posta sunucusunu, yalnızca gönderen e-posta sunucusunu atlamaya çalışmıyorum.
Dean Schulze

E-posta göndermek için bir posta istemcisi veya bir posta sunucusu olmanız gerekir. Çoğu durumda, postaları istemci olarak göndermek için, beyaz listeleme veya yetkilendirme yoluyla güvenilir olmanız gerekir. Sunucu olarak göndermek için, yetkilendirme kuralları genellikle daha katıdır. Gerçekten, alıcıların e-posta sunucularının geçerli gönderenleri yetkilendirmek için kullandığı kurallara bağlıdır.
BobDalgleish

@BobDalgleish: Makinenize erişimi yönetebilirsem, her şeyi yapabilirim. Postaları gelen kutunuza koymak da dahil. Bunun sadece akademik bir seçenek olduğuna katılıyorum, ancak soru o kadar açık bir şekilde ele alınmadı.
JensG

@DeanSchulze: Bence johannes bu soruyu ve neden bu kadar iyi bir fikir olmadığını zaten yanıtladı. Ben olsaydım, hizmet fikrini tercih ederim.
JensG

0

Java kodundan birine posta göndermemiz gerekirse, bazı posta sunucusu kimlik bilgilerine erişmemiz gerekir. Her zaman değil.

Google, posta sunucularından birine ücretsiz erişim sağlamıştır ve bunu Java kodunda kullanabilirsiniz. Aşağıda yazılı kod daha fazla kendime not gibi. Yani, bir ara ihtiyacım olursa, buraya başvurabilirsiniz: 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.");
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.