Problème :
Une erreur se produit lors de la tentative d'envoi d'un e-mail à l'aide de Java en raison de la connexion problèmes avec le serveur SMTP localhost.
Question :
Le code fourni peut-il être utilisé pour envoyer des e-mails ?
Réponse :
Le code fourni pour l'envoi d'e-mails à l'aide de Java, qui utilise les paramètres par défaut du serveur de messagerie, peut ne pas fonctionner dans tous les cas. Plus précisément, il est peu probable que le serveur SMTP localhost soit fonctionnel par défaut.
Solution :
Pour envoyer des e-mails de manière fiable à l'aide de Java, envisagez d'utiliser un serveur SMTP tiers tel que comme Google Mail. Voici un extrait de code montrant comment envoyer des e-mails via le serveur SMTP de Google à l'aide de leur API et de l'authentification oAuth2 :
import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.gmail.Gmail; import com.google.api.services.gmail.model.Message; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.util.HashSet; import java.util.Properties; import java.util.Set; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class GoogleMail { private static final GsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); private static final HttpTransport HTTP_TRANSPORT; private static final File DATA_STORE_DIRECTORY = getGmailDataDirectory(); static { try { HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); } catch (GeneralSecurityException | IOException e) { throw new RuntimeException(e); } } private static Gmail getGmailService(Credential credential) throws IOException { return new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName("My Gmail App").build(); } private static File getGmailDataDirectory() { return new File(org.yccheok.jstock.gui.Utils.getUserDataDirectory() + "authentication" + File.separator + "gmail"); } public static void sendEmail(String to, String subject, String message) throws MessagingException, IOException { // Get the email account from saved credentials String email = loadEmail(DATA_STORE_DIRECTORY); if (email == null) { // If no credentials saved, request user authorization Pair<Pair<Credential, String>, Boolean> credentials = authorizeGmail(); if (!credentials.second) { throw new RuntimeException("Failed to get credentials from user"); } email = credentials.first.second; // Save the email address for future use saveEmail(DATA_STORE_DIRECTORY, email); } // Create a MIME message Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); MimeMessage emailMessage = new MimeMessage(session); // Set the sender's email address InternetAddress sender = new InternetAddress(email); emailMessage.setFrom(sender); // Set the recipient's email address InternetAddress recipient = new InternetAddress(to); emailMessage.addRecipient(Message.RecipientType.TO, recipient); // Set the subject and the message body emailMessage.setSubject(subject); emailMessage.setText(message); // Get the authorized credentials Credential credential = credentialsPair.first.first; // Create a Gmail service object Gmail gmailService = getGmailService(credential); // Create a message object and send the email Message messageObject = createMessageWithEmail(emailMessage); gmailService.users().messages().send("me", messageObject).execute(); } private static Message createMessageWithEmail(MimeMessage emailMessage) throws MessagingException, IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); emailMessage.writeTo(baos); String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray()); return new Message().setRaw(encodedEmail); } private static Pair<Pair<Credential, String>, Boolean> authorizeGmail() throws IOException { // Load client secrets from a resource file GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(GoogleMail.class.getResourceAsStream("/client_secrets.json"))); // Define the OAuth 2.0 scopes to request Set<String> scopes = new HashSet<>(); scopes.add(GmailScopes.GMAIL_SEND); // Build the Google Authorization Code Flow object GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes) .setDataStoreFactory(new FileDataStoreFactory(DATA_STORE_DIRECTORY)) .build(); // Request the user's authorization return new MyAuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } } // Call the sendEmail method to send the email GoogleMail.sendEmail("recipient@example.com", "Subject", "Message");
Remarques supplémentaires :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!