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),