Przygotowanie projektu
Pierwszym krokiem jakim musisz wykonać jest założenie sobie konta na googlach. Następnie potrzebujemy jeszcze biblioteki Java Mail dzięki której będziemy mogli wysyłać maile. Plik jar możemy ściągnąć z oficjalnej strony Java Mail Api. Po ściągnięciu i rozpakowaniu, plik mail.jar przenosimy do katalogu bibliotek w naszym projekcie.
Proste wysłanie maila
Oto prosty kod dzięki któremu wyślemy bardzo prostą wiadomość:
package com.blogspot.mkorwel.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * * @author Mateusz Korwel * */ public class SendMail { private static final String HOST = "smtp.gmail.com"; private static final int PORT = 465; // Adres email osby która wysyła maila private static final String FROM = "mateusz.korwel@gmail.com"; // Hasło do konta osoby która wysyła maila private static final String PASSWORD = "xxx"; // Adres email osoby do której wysyłany jest mail private static final String TO = "mateusz.korwel@gmail.com"; // Temat wiadomości private static final String SUBJECT = "Hello World"; // Treść wiadomości private static final String CONTENT = "To mój pierwszy mail wysłany za pomocą JavaMailAPI."; public static void main(String[] args) { try { new SendMail().send(); } catch (MessagingException e) { e.printStackTrace(); } } public void send() throws MessagingException { Properties props = new Properties(); props.put("mail.transport.protocol", "smtps"); props.put("mail.smtps.auth", "true"); // Inicjalizacja sesji Session mailSession = Session.getDefaultInstance(props); // ustawienie debagowania, jeśli nie chcesz oglądać logów to usuń // linijkę poniżej lub zmień wartość na false mailSession.setDebug(true); // Tworzenie wiadomości email MimeMessage message = new MimeMessage(mailSession); message.setSubject(SUBJECT); message.setContent(CONTENT, "text/plain; charset=ISO-8859-2"); message.addRecipient(Message.RecipientType.TO, new InternetAddress(TO)); Transport transport = mailSession.getTransport(); transport.connect(HOST, PORT, FROM, PASSWORD); // wysłanie wiadomości transport.sendMessage(message, message .getRecipients(Message.RecipientType.TO)); transport.close(); } }
Powyższy kod wysyła bardzo prostą wiadomość email. A co jeśli chcieli byśmy sformatować naszą wiadomość przy pomocy znaczków html? Powyższy kod wysłał by całą zawartość maila bez żadnej transformacji, ale wystarczy że zmienimy typ mime naszej wiadomości i treść zostanie sformatowana. Obecnie mamy text/plain a potrzebujemy text/html. Po takiej zmianie możemy wysyłać maila z kodem html.
Wysłanie maila z załącznikiem
Oto prosty kod dzięki któremu wyślemy wiadomość z załącznikiem:
package com.blogspot.mkorwel.mail; import javax.mail.*; import javax.mail.internet.*; import javax.activation.FileDataSource; import javax.activation.DataHandler; import java.util.Properties; /** * * @author Mateusz Korwel * */ class SendMailAttachment { private static final String HOST = "smtp.gmail.com"; private static final int PORT = 465; // Adres email osby która wysyła maila private static final String FROM = "mateusz.korwel@gmail.com"; // Hasło do konta osoby która wysyła maila private static final String PASSWORD = "xxx"; // Adres email osoby do której wysyłany jest mail private static final String TO = "mateusz.korwel@gmail.com"; // Temat wiadomości private static final String SUBJECT = "Hello World"; // Treść wiadomości private static final String CONTENT = "To mój pierwszy mail z załącznikami wysłaby za pomocą JavaMailAPI."; // Ścieżka do pliku private static final String PATH_FILE = "zalacznik.txt"; public static void main(String[] args) { try { new SendMailAttachment().send(); System.out.println("Wiadomość wysłana"); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } void send() throws MessagingException { Properties props = new Properties(); props.put("mail.transport.protocol", "smtps"); props.put("mail.smtps.auth", "true"); // Pobranie sesji Session mailSession = Session.getDefaultInstance(props, null); // Tworzenie wiadomości MimeMessage message = new MimeMessage(mailSession); message.setSubject(SUBJECT); // Stworzenie części wiadomosci z treścią MimeBodyPart textPart = new MimeBodyPart(); textPart.setContent(CONTENT, "text/html; charset=ISO-8859-2"); // Stworzenie części z załacznikami MimeBodyPart attachFilePart = new MimeBodyPart(); FileDataSource fds = new FileDataSource(PATH_FILE); attachFilePart.setDataHandler(new DataHandler(fds)); attachFilePart.setFileName(fds.getName()); // Zestawienie obydwu części maila w jedną wieloczęściową Multipart mp = new MimeMultipart(); mp.addBodyPart(textPart); mp.addBodyPart(attachFilePart); // Dodanie treści maila message.setContent(mp); message.addRecipient(Message.RecipientType.TO, new InternetAddress(TO)); Transport transport = mailSession.getTransport(); transport.connect(HOST, PORT, FROM, PASSWORD); // Wysąłnei maila transport.sendMessage(message, message .getRecipients(Message.RecipientType.TO)); transport.close(); } }
Powyższego kodu chyba nie trzeba komentować. Jedną różnicą maila z załącznikami od maila bez załączników jest to, że wiadomość składa się z kilku części.
Nie wiem jak 5 lat temu, ale dzisiaj google blokuje próbę logowania za pomocą powyższego kodu.
OdpowiedzUsuńJak stowrzyć "bezpieczną" aplikację? Czego wg google brakuje w powyższej klasie?
blokuje pewnie z tego powodu aby uniemozliwic botom do wysylania wiadomośći
OdpowiedzUsuńBabyliss Pro Nano Titanium - titanium-arts.com
OdpowiedzUsuńWe tested this product titanium rod in leg on a babylisspro nano titanium spring curling iron wide variety of samsung titanium watch applications in titanium pipes a number of products titanium straightener including: Caroble (a beverage), Alcohol (beer),