Invio di messaggi con l'API Mail

L'API del servizio Mail per Java supporta l'interfaccia JavaMail (javax.mail) per l'invio di messaggi email.

Prima di iniziare

Registra le tue email dei mittenti come mittenti autorizzati. Per maggiori informazioni, consulta l'articolo su chi può inviare email.

Invio di messaggi email

Per inviare messaggi email, utilizza le classi JavaMail incluse nell'SDK di App Engine.

Quando crei una sessione JavaMail, se non fornisci una configurazione del server SMTP, App Engine utilizza il servizio di posta per l'invio di messaggi. In alternativa, aggiungi la configurazione SMTP per i provider di posta di terze parti supportati come Mailgun, Mailjet o SendGrid.

Per inviare un messaggio:

  1. Crea un messaggio utilizzando un oggetto JavaMail Session.

  2. Crea un oggetto MimeMessage.

  3. Per impostare il mittente e il destinatario del messaggio, utilizza il corso InternetAddress.

    1. Identifica il mittente chiamando il metodo setFrom() nell'oggetto MimeMessage. Se vuoi, puoi fornire un nome personale come stringa nel secondo parametro.

    2. Identifica il destinatario passando un tipo di destinatario e un indirizzo al metodo addRecipient(). Il tipo di destinatario può essere Message.RecipientType.TO, Message.RecipientType.CC o Message.RecipientType.BCC.

    Il costruttore InternetAddress genera un AddressException se l'indirizzo email non è valido.

  4. Per impostare un indirizzo per le risposte, utilizza il metodo setReplyTo().

  5. Stabilisci i contenuti del messaggio chiamando i metodi nell'oggetto MimeMessage. Imposta l'oggetto con setSubject() e il corpo dei contenuti in testo non crittografato con setText().

  6. Per inviare il messaggio, utilizza il metodo statico send() nella classe Transport.

Il servizio di posta consente di specificare un insieme limitato di intestazioni per i messaggi email in uscita. Per maggiori informazioni, consulta la sezione Intestazioni facoltative che puoi utilizzare.

Il seguente esempio di codice mostra come inviare posta:

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

try {
  Message msg = new MimeMessage(session);
  msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
  msg.addRecipient(Message.RecipientType.TO,
                   new InternetAddress("user@example.com", "Mr. User"));
  msg.setSubject("Your Example.com account has been activated");
  msg.setText("This is a test");
  Transport.send(msg);
} catch (AddressException e) {
  // ...
} catch (MessagingException e) {
  // ...
} catch (UnsupportedEncodingException e) {
  // ...
}

Le chiamate al servizio Mail sono asincrone e ritornano immediatamente. Il servizio Mail gestisce il processo di contatto con i server di posta dei destinatari e di recapito del messaggio. Se si verifica un problema durante l'invio del messaggio a qualsiasi destinatario o se il server di posta di un destinatario restituisce un messaggio di "rimbalzo", il messaggio di errore viene inviato al mittente.

Invio di messaggi multiparte

Puoi inviare messaggi in più parti, ad esempio un messaggio con file allegati o un messaggio con corpo del messaggio di testo normale e corpo del messaggio HTML.

Per inviare un messaggio in più parti:

  1. Crea un oggetto MimeMultipart che contenga le parti, quindi crea un oggetto MimeBodyPart per ogni allegato o corpo del messaggio alternativo e aggiungilo al contenitore.

  2. Assegna il contenitore ai contenuti di MimeMessage.

Il seguente esempio di codice mostra come inviare un messaggio in più parti:

String htmlBody = "";          // ...
byte[] attachmentData = null;  // ...
Multipart mp = new MimeMultipart();

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);

MimeBodyPart attachment = new MimeBodyPart();
InputStream attachmentDataStream = new ByteArrayInputStream(attachmentData);
attachment.setFileName("manual.pdf");
attachment.setContent(attachmentDataStream, "application/pdf");
mp.addBodyPart(attachment);

msg.setContent(mp);

Per motivi di sicurezza, le parti e gli allegati dei messaggi devono essere di uno dei vari tipi consentiti e i nomi file degli allegati devono terminare con un'estensione di nome file riconosciuta per il tipo. Per un elenco dei tipi e delle estensioni dei nomi file consentiti, vedi Posta con allegati.