Invio di e-mail senza utilizzare un server e-mail

11

JavaMail invia e-mail utilizzando un server di posta elettronica, in genere tramite l'interfaccia SMTP di un provider di posta elettronica. È necessario utilizzare un server e-mail per inviare e-mail?

Ho un sito web che invierà e-mail e, se possibile, vorrei inviare le e-mail direttamente dal codice del sito web senza utilizzare un server di posta elettronica. Le FAQ di JavaMail dicono che è richiesto un server di posta elettronica.

C'è un modo per inviare e-mail senza usare un server e-mail, con JavaMail o un'altra API?

    
posta Dean Schulze 17.02.2014 - 21:51
fonte

3 risposte

11

Puoi inviare un'email direttamente a uno dei server SMTP menzionati nel record MX del dominio dell'indirizzo. Di solito è una cattiva idea, però:

La consegna della posta a un server locale è veloce: puoi quasi immediatamente continuare e fare qualcos'altro e lasciare che il server gestisca la consegna.

La consegna effettiva può richiedere del tempo, ad esempio il server di posta remoto potrebbe essere lento. Oppure potrebbe rifiutare prima la posta: è una strategia conosciuta contro lo spam per dire a un mittente di provare a inviare una posta una seconda volta, cosa che alcuni bot non faranno.

Anche il server di posta può facilmente riprovare il giorno dopo, quando il server remoto non funziona, questo riduce il rischio di smarrimento della posta.

    
risposta data 17.02.2014 - 21:57
fonte
1

Dipende tutto da cosa intendi per "usare" esattamente.

Se "usa" include solo l'uso diretto di un server di posta elettronica, è possibile passare la posta per inviare tramite un altro tipo di servizio indirettamente a un server di posta elettronica. Per casi di utilizzo pratico, questa mi sembra una soluzione "Good Enough ™".

Se, tuttavia, la tua domanda significa letteralmente " senza coinvolgere alcun server di posta elettronica ", ciò sarebbe possibile solo se il tuo software è in grado di inserire la posta nella casella di posta in arrivo del client di destinazione in qualche modo a tua scelta, ma tranne POP3 o IMAP o qualsiasi altro protocollo rilevante per l'email usato nel contesto dell'email (perché, se si usasse un tale protocollo, quel particolare programma agirà da server di posta, che non è permesso)

Per rispondere alla domanda: Sì. Almeno in teoria.

    
risposta data 17.02.2014 - 22:32
fonte
0

Se dobbiamo inviare una mail a qualcuno dal codice Java, dobbiamo avere accesso su alcune credenziali del server di posta. Beh, non sempre.

Google ha fornito l'accesso gratuito a uno dei suoi server di posta e puoi utilizzarlo nel codice Java. Sotto il codice scritto se più come una nota a me stesso. Quindi, se ne avrò bisogno qualche volta, puoi fare riferimento qui: link

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.");
    }
}
    
risposta data 25.02.2014 - 19:30
fonte

Leggi altre domande sui tag