28 Şubat 2018 Çarşamba

JavaMail MimeMessage Sınıfı

Giriş
Bu sınıfı kullanmak için şu satır dahil edilir. Bu sınıf .Net'teki MailMessage sınıfına benzer. Message soyut sınıfından kalıtır.
import javax.mail.internet.MimeMessage;
Bu nesne aslında dış zarf gibi düşünülebilir. İçinde from,to,subject ve eklentileri taşır.
Nesne doldurulduktan sonra Transport nesnesi ile gönderilir. Şöyle yaparız.
MimeMessage message = new MimeMessage(session);    
...
//send message  
Transport.send(message);    
constructor
Şöyle yaparız.
Session session = ...;
MimeMessage mimeMsg = new MimeMessage (session);
addRecipient metodu
Şöyle yaparız.
final String to="xxxx4@gmail.com";
mimeMsg.addRecipient(Message.RecipientType.TO,new InternetAddress(to));   
saveChanges metodu
Şöyle yaparız.
mimeMsg.saveChanges ();
setContent - Multipart
MimeMultipart ile hem html hem de eklenti göndermek isteyelim MimeMultipart nesnesine addBodyPart() çağrısı ile ekleriz. Daha sonra bu nesneyi setContent() çağrısı ile MimeMessage nesnesin ekleriz.

Örnek
Şöyle yaparız.
Multipart multipart = new MimeMultipart();
multipart.addBodyPart (mimeBodyPart);
multipart.addBodyPart (attachPart);

mimeMsg.setContent (multipart);
Örnek
Şöyle yaparız.
// Your mail has 2 parts, the BODY(html) and the EMBEDDED image
MimeMultipart multipart = new MimeMultipart("related");

// first part (the html)
BodyPart messageBodyPart = new MimeBodyPart();
String htmlText = "<H1>Hello</H1><img src=\"cid:image\">";
messageBodyPart.setContent(htmlText, "text/html");

// Add it
multipart.addBodyPart(messageBodyPart);

// Second part (EMBEDDED image)
messageBodyPart = new MimeBodyPart();
DataSource fds = new FileDataSource("/path/to/your/image/tr.png");

messageBodyPart.setDataHandler(new DataHandler(fds));
messageBodyPart.setHeader("Content-ID", "<image>");

// add the image to the multipart
multipart.addBodyPart(messageBodyPart);

// put everything together
message.setContent(multipart);

// Send message
Transport.send(message);
setFrom metodu
Şöyle yaparız.
String from1 = "me@mycompany.com";
mimeMsg.setFrom (new InternetAddress(from));
setRecipient metodu
To için şöyle yaparız.
String to = "to@abc.com";
mimeMsg.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to));
Cc için şöyle yaparız.
String ccAddress = ...;
mimeMsg.setRecipients (Message.RecipientType.CC, ccAddress);
setSubject metodu
Şöyle yaparız.
String subject = ...;
mimeMsg.setSubject (subject);
setText metodu
Şöyle yaparız.
String body = ...;
mimeMsg.setText (body);
setSentDate metodu
Şöyle yaparız.
mimeMsg.setSentDate (new Date());
Diğer Notlar
Bilgisayardaki kurulu e-posta uygulamasını açmak için awt.Desktop sınıfını kullanırız. Desktop yazısına bakabilirsiniz.




JavaMail Properties Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.util.Properties;
Örnek
Şu alanlar doldurulur.
mail.port=25

mail.smtp.starttls.enable=true
mail.smtp.auth=true
mail.transport.protocol=smtp
mail.debug=true
mail.smtp.ssl.trust = localhost
mail.host = localhost
mail.username=XXXXXX
mail.password=XXXXXX
Örnek
Şu alanlar doldurulur.
Properties props = System.getProperties();
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");
Auth
Sunucunun bizi doğrulaması için kullanılır. Şöyle yaparız.
props.put("mail.smtp.auth", "true");
Debug
Şöyle yaparız.
props.put("mail.smtp.debug", "true");
Host ve Port
Şöyle yaparız.
props.put("mail.smtp.host", "mail.mydomain.com");
props.put("mail.smtp.port", "587");
SSL
SSL kullanmak için Properties içine verilen mail.smtp.ssl.enable anahtarı true yapılır. SMPT yerine POP3, IMAP gelebilir.

Şöyle yaparız.
props.put("mail.smtp.socketFactory.port", "465");    
props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");  

TLS
Bağlantı kurulduktan sonra TLS'e geçmek için mail.smtp.starttls.enable anahtarı true yapılır.
props.put("mail.smtp.starttls.enable", "true");
Şu açıklama faydalı.
TLS is compulsory on 587 and any attempt to open a session without TLS yield the SMTP server error response "530 Must issue a STARTTLS command first". Then setting "mail.smtp.starttls.enable" to "true" alone still yield the same error "Could not convert socket to TLS" but now with a clue: "Server is not trusted". Indeed, you must have either a keystore defined in the JVM start properties that would contain a certificate chain ending onto a trusted root certificate, either enforce trust with this extra property: "mail.smtp.ssl.trust" set to the remote host name.