Come inviare messaggi di posta elettronica usando SendGrid da Java in una distribuzione AzureHow to Send Email Using SendGrid from Java in an Azure Deployment

L'esempio seguente illustra come è possibile usare SendGrid per inviare messaggi di posta elettronica da una pagina Web ospitata in Azure.The following example shows you how you can use SendGrid to send emails from a web page hosted in Azure. L'applicazione risultante chiederà all'utente di inserire i valori relativi al messaggio di posta elettronica, come illustrato nella schermata seguente.The resulting application will prompt the user for email values, as shown in the following screen shot.

Modulo per la posta elettronica

Il messaggio di posta elettronica finale dovrebbe essere simile a quello riportato nella schermata seguente.The resulting email will look similar to the following screen shot.

Messaggio di posta elettronica

Per usare il codice in questo argomento è necessario eseguire le operazioni seguenti:You'll need to do the following to use the code in this topic:

  1. Ottenere i file JAR di javax.mail, ad esempio da http://www.oracle.com/technetwork/java/javamail/index.html.Obtain the javax.mail JARs, for example from http://www.oracle.com/technetwork/java/javamail/index.html.
  2. Aggiungere i file JAR al percorso di compilazione Java.Add the JARs to your Java build path.
  3. Se si usa Eclipse per creare l'applicazione Java, è possibile includere le librerie SendGrid nel file di distribuzione dell'applicazione (WAR) usando l'assembly di distribuzione di Eclipse.If you are using Eclipse to create this Java application, you can include the SendGrid libraries in your application deployment file (WAR) using Eclipse's deployment assembly feature. Se non si usa Eclipse per creare l'applicazione Java, verificare che le librerie siano incluse nello stesso ruolo di Azure dell'applicazione Java e che sia stato aggiunto al percorso della classe dell'applicazione.If you are not using Eclipse to create this Java application, ensure the libraries are included within the same Azure role as your Java application, and added to the class path of your application.

Per poter inviare i messaggi di posta elettronica è inoltre necessario disporre di un nome utente e una password di SendGrid.You must also have your own SendGrid username and password, to be able to send the email. Per iniziare a usare SendGrid, vedere Come inviare messaggi di posta elettronica usando SendGrid da Java.To get started with SendGrid, see How to send email using SendGrid from Java.

Se non si usa Eclipse, è inoltre consigliabile consultare l'argomento Creazione di un'applicazione Hello World per Azure in Eclipseo acquisire familiarità con altre tecniche per l'hosting di applicazioni Java in Azure.Additionally, familiarity with the information at Creating a Hello World Application for Azure in Eclipse, or with other techniques for hosting Java applications in Azure if you are not using Eclipse, is highly recommended.

Creare un modulo Web per l'invio di posta elettronicaCreate a web form for sending email

Nel codice seguente viene illustrato come creare un modulo Web per recuperare i dati utente per l'invio di posta elettronica.The following code shows how to create a web form to retrieve user data for sending email. Per gli scopi di questa esercitazione il file JSP è denominato emailform.jsp.For purposes of this content, the JSP file is named emailform.jsp.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Email form</title>
</head>
<body>
 <p>Fill in all fields and click <b>Send this email</b>.</p>
 <br/>
  <form action="sendemail.jsp" method="post">
   <table>
     <tr>
       <td>To:</td>
       <td><input type="text" size=50 name="emailTo">
       </td>
     </tr>
     <tr>
       <td>From:</td>
       <td><input type="text" size=50 name="emailFrom">
       </td>
     </tr>
     <tr>
       <td>Subject:</td>
       <td><input type="text" size=100 name="emailSubject" value="My email subject">
       </td>
     </tr>
     <tr>
       <td>Text:</td>
       <td><input type="text" size=400 name="emailText" value="Hello,<p>This is my message.</p>Thank you." />
       </td>
     </tr>
     <tr>
       <td>SendGrid user name:</td>
       <td><input type="text" name="sendGridUser">
       </td>
     </tr>
     <tr>
       <td>SendGrid password:</td>
       <td><input type="password" name="sendGridPassword">
       </td>
     </tr>
     <tr>
       <td colspan=2><input type="submit" value="Send this email">
       </td>
     </tr>
   </table>
 </form>
 <br/>
</body>
</html>

Creare il codice per l'invio della posta elettronicaCreate the code to send the email

Il codice seguente, chiamato quando si completa il modulo in emailform.jsp, crea il messaggio di posta elettronica e lo invia.The following code, which is called when you complete the form in emailform.jsp, creates the email message and sends it. Per gli scopi di questa esercitazione il file JSP è denominato sendemail.jsp.For purposes of this content, the JSP file is named sendemail.jsp.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="javax.activation.*, javax.mail.*, javax.mail.internet.*, java.util.Date, java.util.Properties" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Email processing happens here</title>
</head>
<body>
    <b>This is my send mail page.</b><p/>
 <%

 final String sendGridUser = request.getParameter("sendGridUser");
 final String sendGridPassword = request.getParameter("sendGridPassword");

 class SMTPAuthenticator extends Authenticator
 {
   public PasswordAuthentication getPasswordAuthentication()
   {
        String username = sendGridUser;
        String password = sendGridPassword;

        return new PasswordAuthentication(username, password);   
   }
 }
 try
 {

     // The SendGrid SMTP server.
     String SMTP_HOST_NAME = "smtp.sendgrid.net";

     Properties properties;

     properties = new Properties();

     // Specify SMTP values.
     properties.put("mail.transport.protocol", "smtp");
     properties.put("mail.smtp.host", SMTP_HOST_NAME);
     properties.put("mail.smtp.port", 587);
     properties.put("mail.smtp.auth", "true");

     // Display the email fields entered by the user. 
     out.println("Value entered for email Subject: " + request.getParameter("emailSubject") + "<br/>");        
     out.println("Value entered for email      To: " + request.getParameter("emailTo") + "<br/>");
     out.println("Value entered for email    From: " + request.getParameter("emailFrom") + "<br/>");
     out.println("Value entered for email    Text: " + "<br/>" + request.getParameter("emailText") + "<br/>");

     // Create the authenticator object.
     Authenticator authenticator = new SMTPAuthenticator();

     // Create the mail session object.
     Session mailSession;
     mailSession = Session.getDefaultInstance(properties, authenticator);

     // Display debug information to stdout, useful when using the
     // compute emulator during development.
     mailSession.setDebug(true);

     // Create the message and message part objects.
     MimeMessage message;
     Multipart multipart;
     MimeBodyPart messagePart; 

     message = new MimeMessage(mailSession);

     multipart = new MimeMultipart("alternative");
     messagePart = new MimeBodyPart();
     messagePart.setContent(request.getParameter("emailText"), "text/html");
     multipart.addBodyPart(messagePart);            

     // Specify the email To, From, Subject and Content. 
     message.setFrom(new InternetAddress(request.getParameter("emailFrom")));
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(request.getParameter("emailTo")));
     message.setSubject(request.getParameter("emailSubject")); 
     message.setContent(multipart);

     // Uncomment the following if you want to add a footer.
     // message.addHeader("X-SMTPAPI", "{\"filters\": {\"footer\": {\"settings\": {\"enable\":1,\"text/html\": \"<html>This is my <b>email footer</b>.</html>\"}}}}");

     // Uncomment the following if you want to enable click tracking.
     // message.addHeader("X-SMTPAPI", "{\"filters\": {\"clicktrack\": {\"settings\": {\"enable\":1}}}}");

     Transport transport;
     transport = mailSession.getTransport();
     // Connect the transport object.
     transport.connect();
     // Send the message.
     transport.sendMessage(message,  message.getRecipients(Message.RecipientType.TO));
     // Close the connection.
     transport.close();

    out.println("<p>Email processing completed.</p>");

 }
 catch (Exception e)
 {
     out.println("<p>Exception encountered: " + 
                        e.getMessage()     +
                        "</p>");   
 }
%>

</body>
</html>

Oltre a inviare la posta elettronica emailform.jsp fornisce un risultato all'utente. Nella schermata di seguito viene visualizzato un esempio:In addition to sending the email, emailform.jsp provides a result for the user; an example is the following screen shot:

Risultato invio posta elettronica

Passaggi successiviNext steps

Distribuire l'applicazione sull'emulatore di calcolo e, dall'interno di un browser, eseguire emailform.jsp, immettere i valori nel modulo, fare clic su Send this emaile quindi visualizzare i risultati in sendemail.jsp.Deploy your application to the compute emulator and within a browser run emailform.jsp, enter values in the form, click Send this email, and then see results in sendemail.jsp.

Questo codice ha lo scopo di illustrare come usare SendGrid con Java in Azure.This code was provided to show you how to use SendGrid in Java on Azure. Prima di eseguire la distribuzione in Azure in produzione, può essere necessario aggiungere ulteriori funzionalità per la gestione degli errori o per altri scopi.Before deploying to Azure in production, you may want to add more error handling or other features. Ad esempio:For example: