Invio di email con l'API Mail

L'API del servizio Mail per Java supporta Interfaccia JavaMail (javax.mail) per inviare messaggi email.

Prima di iniziare

Registrare gli indirizzi email dei mittenti come mittenti autorizzati. Per ulteriori informazioni, vedi chi può inviare email.

Invio di messaggi email

Per inviare messaggi email, utilizza le classi JavaMail incluse in App Engine l'SDK.

Quando crei una sessione JavaMail, se non fornisci alcuna configurazione del server SMTP, App Engine utilizza il servizio Mail per l'invio dei messaggi. In alternativa, aggiungi la configurazione SMTP per la posta di terze parti supportata come Mailgun, Mailjet oppure 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 la classe InternetAddress.

    1. Identifica il mittente chiamando il metodo setFrom() sull'oggetto MimeMessage. Facoltativamente, puoi fornire un nome personale come 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 sembra non essere valido.

  4. Per impostare un indirizzo "Rispondi a", utilizza il metodo setReplyTo().

  5. Stabilisci i contenuti del messaggio chiamando i metodi sull'oggetto MimeMessage. Imposta l'oggetto con setSubject() e imposta il contenuto del corpo in testo normale con setText().

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

Il servizio Mail consente di specificare un insieme limitato di intestazioni per i messaggi email in uscita. Per ulteriori informazioni, consulta Intestazioni facoltative che puoi .

Il seguente esempio di codice mostra come inviare la 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 restituiscono un risultato immediatamente. The Mail gestisce il processo di contatto dei destinatari di posta elettronica e per consegnare il messaggio. Se si verifica un problema durante l'invio del messaggio a un destinatario o se il server di posta di un destinatario restituisce un messaggio di "rifiuto", il messaggio di errore viene inviato al mittente.

Invio di messaggi suddivisi in più parti

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

Per inviare un messaggio suddiviso in più parti:

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

  2. Assegna il contenitore ai contenuti per 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 dei messaggi e gli allegati devono essere di uno dei diversi 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 di file consentiti, consulta Posta con allegati.