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


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 di posta elettronica 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 indicano che è richiesto un server di posta elettronica.

Esiste un modo per inviare e-mail senza utilizzare un server di posta elettronica, con JavaMail o un'altra API?


No, non è possibile. In che modo i client di posta elettronica dovrebbero ricevere l'e-mail che li stai inviando?
Oded,


Un'alternativa, che non funzionerà necessariamente con JavaMail, è quella di impostare un MTA come Postfix. Non avrai bisogno di un server di posta remoto, quindi, perché ne hai uno locale.
user16764,

Precisamente. Suppongo che potresti dire che il vecchio MTA di Microsoft Mail era "senza server", nel senso che tutti i client di Microsoft Mail si occupavano individualmente di ottenere e inserire messaggi da / verso l'archivio di posta centrale sul file system (su un file server , dal modo). Ma anche allora l'unico modo per trasferire la posta da quel sistema su qualcun altro era tramite un gateway, che coinvolge sempre i server. Sei sicuro di aver posto la domanda che volevi?
Craig,

Risposte:


11

È possibile recapitare un'e-mail direttamente a uno dei server SMTP menzionati nel record MX del dominio dell'indirizzo. Di solito questa è una cattiva idea, però:

La consegna della posta a un server locale è rapida: 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 nota contro lo spam dire a un mittente di provare a inviare una seconda volta, cosa che alcuni robot spam non faranno.

Inoltre, il server di posta può riprovare facilmente un giorno dopo circa quando il server remoto è inattivo, questo riduce il rischio di perdere la posta.


Grazie per le informazioni sulla prevenzione dello spam. Vedo come cambiare queste strategie rende una buona idea l'uso di un server di posta elettronica.
Decano Schulze,

2
tecnicamente, farlo trasforma la tua applicazione in un server di posta, quindi stai ancora usando un server di posta, anche se un po 'spoglio.
jwenting

@jwenting come sarebbe un server di posta se solo fungesse da client che si collega ad altri server? Ho pensato piuttosto di essere un "server"
dovevi

Inoltre, è probabile che l'invio a server di posta remoti direttamente dall'app esegua verifiche antispam SPF / DMARC.
Craig,

1

Tutto dipende da cosa intendi esattamente per "uso".

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

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 posta in arrivo del client di destinazione in un modo a tua scelta, ma tranne POP3 o IMAP o qualsiasi altro protocollo rilevante per la posta elettronica utilizzato nel contesto della posta elettronica (poiché, se si utilizza un protocollo di questo tipo, quel particolare programma fungerebbe da server di posta, il che non è consentito)

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


Sto chiedendo se devo usare un server di posta elettronica per inviare l'e-mail al server di posta elettronica dei destinatari (2 server di posta elettronica). Sono interessato a inviare direttamente al server di posta elettronica dei destinatari dal mio codice (1 server di posta elettronica). Non sto cercando di ignorare il server di posta elettronica dei destinatari, ma solo il server di posta elettronica di invio.
Dean Schulze,

Per inviare e-mail, devi essere un client di posta o un server di posta. Nella maggior parte dei casi, per inviare la posta come client, è necessario essere attendibili, tramite white list o autorizzazione. Per inviare come server, le regole di autorizzazione sono spesso più rigide. Dipende molto dalle regole utilizzate dai server di posta elettronica dei destinatari per autorizzare mittenti validi.
BobDalgleish,

@BobDalgleish: se riesco a gestire l'accesso alla tua macchina, posso fare qualsiasi cosa. Compreso l'inserimento di posta nella tua casella di posta. Concordo sul fatto che si tratta di un'opzione puramente accademica, ma la domanda non era così chiara.
JensG,

@DeanSchulze: Penso che Johannes abbia già risposto a quella particolare domanda e perché non sia una buona idea. Se fossi in te, favorirei l'idea del servizio.
JensG,

0

Se dobbiamo inviare una posta a qualcuno dal codice Java, dobbiamo avere accesso ad alcune credenziali del server di posta. Bene, 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 per me stesso. Quindi, se ne avessi bisogno qualche volta, puoi fare riferimento qui: 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.");
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.