Invio di posta con l'API Mail

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

Prima di iniziare

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

Invio di email

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

Quando crei una sessione JavaMail, se non fornisci alcun server SMTP , App Engine utilizza il servizio Mail per inviare 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() sulla 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'email l'indirizzo non sembra essere valido.

  4. Per impostare una "risposta a" utilizza il metodo setReplyTo().

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

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

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

Il seguente esempio di codice mostra come inviare email:

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 di posta sono asincrone e vengono restituite immediatamente. Il servizio Mail gestisce la procedura di contatto dei server di posta dei destinatari e la consegna del messaggio. Se si verifica un problema di invio del messaggio a qualsiasi destinatario o se il server di posta di un destinatario restituisce un "rimbalzo" l'errore messaggio viene inviato al mittente.

Invio di messaggi suddivisi in più parti

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

Per inviare un messaggio in più parti:

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

  2. Assegna il contenitore ai contenuti per MimeMessage.

Il seguente esempio di codice mostra come inviare un messaggio suddiviso 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 seguenti tipi consentiti e i nomi file degli allegati devono terminare con un nome file riconosciuto un'estensione specifica per il tipo. Per un elenco dei tipi e delle estensioni di nomi file consentiti, consulta Posta con allegati.