Téléchargez d'abord l' API JavaMail et assurez-vous que les fichiers jar pertinents se trouvent dans votre chemin de classe.
Voici un exemple de travail complet utilisant GMail.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Main {
private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com")
private static String PASSWORD = "********"; // GMail password
private static String RECIPIENT = "[email protected]";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT }; // list of recipient email addresses
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Naturellement, vous voudrez faire plus dans les catch
blocs que d'imprimer la trace de la pile comme je l'ai fait dans l'exemple de code ci-dessus. (Supprimez les catch
blocs pour voir quels appels de méthode de l'API JavaMail lèvent des exceptions afin que vous puissiez mieux voir comment les gérer correctement.)
Merci à @jodonnel et à tous ceux qui ont répondu. Je lui donne une prime parce que sa réponse m'a conduit à environ 95% du chemin vers une réponse complète.
smtp.gmail.com
. Voir Configuration d'autres clients de messagerie pour plus de détails.javax.mail.AuthenticationFailedException
et devaient permettre explicitement « des applications moins sûres » dans mes paramètres de gmail: google.com/settings/security/lesssecureapps . Une fois "les applications moins sécurisées" activées, le code a fonctionnéQuelque chose comme ça (on dirait que vous avez juste besoin de changer votre serveur SMTP):
la source
message.setText("Welcome to JavaMail");
avec cette ligne:message.setContent("<h1>Hello world</h1>", "text/html");
props.put("mail.smtp.starttls.enable", "true")
D'autres personnes ont de bonnes réponses ci-dessus, mais je voulais ajouter une note sur mon expérience ici. J'ai constaté que lorsque j'utilise Gmail comme serveur SMTP sortant pour ma webapp, Gmail ne me permet d'envoyer qu'environ 10 messages environ avant de répondre avec une réponse anti-spam que je dois parcourir manuellement pour réactiver l'accès SMTP. Les e-mails que j'envoyais n'étaient pas du spam, mais étaient des e-mails de bienvenue sur le site Web lorsque les utilisateurs se sont inscrits sur mon système. Donc, YMMV, et je ne compterais pas sur Gmail pour une webapp de production. Si vous envoyez des e-mails au nom d'un utilisateur, comme une application de bureau installée (où l'utilisateur saisit ses propres informations d'identification Gmail), vous pouvez être d'accord.
De plus, si vous utilisez Spring, voici une configuration de travail pour utiliser Gmail pour SMTP sortant:
la source
Même si cette question est fermée, je voudrais publier une solution de compteur, mais maintenant en utilisant Simple Java Mail (wrapper open source JavaMail smtp):
la source
new Mailer(your login / your session, TransportStrategy.SMTP_TLS).sendMail(email);
Mon code complet comme ci-dessous fonctionne bien:
la source
la source
Le minimum requis:
la source
Les solutions de code publiées peuvent provoquer des problèmes lorsque vous devez configurer plusieurs sessions SMTP n'importe où dans la même JVM.
La FAQ JavaMail recommande d'utiliser
au lieu de
car getDefault n'utilisera que les propriétés indiquées lors de son premier appel. Toutes les utilisations ultérieures de l'instance par défaut ignoreront les modifications de propriété.
Voir http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance
la source
C'est ce que je fais quand je veux envoyer un e-mail avec une pièce jointe, ça marche bien. :)
la source
Une solution simple serait de configurer / activer le compte Gmail pour l'accès POP3. Cela vous permettrait d'envoyer via SMTP normal via les serveurs Gmail.
Ensuite, il vous suffit d'envoyer via smtp.gmail.com (sur le port 587)
la source
Salut, essayez ce code ....
la source
Voici une classe facile à utiliser pour envoyer des e-mails avec
Gmail
. Vous devez avoir laJavaMail
bibliothèque ajoutée à votre chemin de génération ou simplement l'utiliserMaven
.Exemple d'utilisation:
la source
Si vous souhaitez utiliser Outlook avec,
Javamail API
utilisezen tant qu'hôte pour un code de travail plus complet et complet Consultez cette réponse .
la source
Valeur ajoutée:
Session.getInstance()
recommandé plusSession.getDefaultInstance()
la source