Java uygulamaları içerisinden mail gönderme, JavaMail API sayesinde platform bağımsız ve protokol bağımsız olarak gerçekleştirilebiliyor.
Bu yazı da, Java ile mail göndermek için geliştirdiğim basit bir uygulamayı paylaşmak istiyorum. Uygulama, birden fazla mail adresine mail yollayabildiği gibi, istediğiniz kadar ek dosyayıda (attachments) maillarınız içerisinde gönderebilmenizi sağlıyor.
Uygulama tamamen JavaMail API ile geliştirildiğinden dolayı, gerekli olan kütüphaneleri geliştirme ortamınıza eklemeniz gerekiyor. javax.mail paketi altında gerekli olan tüm sınıflar toparlanmıştır. Bu kütüphane eğer geliştirme ortamınızda mevcut değil ise, buradan ulaşabilir, gerekli Jar dosyalarını bilgisayarınıza indirebilirsiniz.
package org.javablog; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /* * @author Fatih Mehmet Arslan */ public class SimpleMailSender { private String smtpHost; //Host private String smtpAuthUser; private String smtpAuthPassword; private String mailBody; private String mailSubject; private String mailSender; private String[] mailList; private String[] attachmentFiles; public SimpleMailSender(String host, String authUser, String authPassword, String body, String subject, String[] list, String sender, String[] files) { smtpHost = host; smtpAuthUser = authUser; smtpAuthPassword = authPassword; mailBody = body; mailSubject = subject; mailSender = sender; mailList = list; attachmentFiles = files; } public void sendMail() throws MessagingException { Properties properties = new Properties(); properties.put("mail.transport.protocol", "smtp"); //this property is required properties.put("mail.smtp.starttls.enable","true"); properties.put("mail.smtp.host", smtpHost); //required if SMTP server requires authentication properties.put("mail.smtp.auth", "true"); Authenticator auth = new SMTPAuthenticator(); Session session = Session.getDefaultInstance(properties, auth); //InternetAddress class represents an Internet email address //Hence, lets model our email addresses InternetAddress mailFrom = new InternetAddress(mailSender); InternetAddress[] mailTo = new InternetAddress[mailList.length]; for(int i = 0; i < mailList.length; i++) { mailTo[i] = new InternetAddress(mailList[i]); } //Modeling an email message //Message abstract class helps us to do this //MimeMessage which extends Message class represents a MIME style email message //We will represent entire email message in this form //Let's create an instance Message message = new MimeMessage(session); message.setFrom(mailFrom); message.setRecipients(Message.RecipientType.TO, mailTo); message.setSubject(mailSubject); /* Construct mail body parts */ Multipart multipart = new MimeMultipart(); //This represents message body part of mail MimeBodyPart bodyPartMessage = new MimeBodyPart(); bodyPartMessage.setText(mailBody); //Add first body part to multipart multipart.addBodyPart(bodyPartMessage); //This represents message attachment part //will be added multipart later MimeBodyPart bodyPartAttachment = new MimeBodyPart();; FileDataSource fileDataSource; for(int i = 0; i < attachmentFiles.length; i++) { fileDataSource = new FileDataSource(attachmentFiles[i]); bodyPartAttachment.setDataHandler(new DataHandler(fileDataSource)); bodyPartAttachment.setFileName(fileDataSource.getName()); //Add all attachment files to bodypart in multipart object multipart.addBodyPart(bodyPartAttachment); } //Add entire mail body to the message object message.setContent(multipart); //Finally send the message Transport.send(message); } //Testing our class public static void main(String[] args) throws MessagingException { String[] to = new String[2]; to[0] = "java@gmail.com"; to[1] = "mail@gmail.com"; String[] files = new String[2]; files[0] = "file1.txt"; files[1] = "file2.txt"; SimpleMailSender mailSender = new SimpleMailSender( "smtp.gmail.com", "authUser@gmail.com", "authPassword", "Mail Body", "Mail Subject", to, "sender@gmail.com", files ); mailSender.sendMail(); System.out.println("Mail has been sent successfully"); } /* * used to do simple authentication when the SMTP * server requires it. */ private class SMTPAuthenticator extends Authenticator { public PasswordAuthentication getPasswordAuthentication() { String username = smtpAuthUser; String password = smtpAuthPassword; return new PasswordAuthentication(username, password); } } //end of SMTPAuthenticator class } // end of SimpleMailSender class
Gerekli açıklamaları kod üzerinde ingilizce olarak göstermeye çalıştım.
İlgili Yazılar:
- Java Scanner ve Formatter Sınıfları ile Dosya İşlemleri
- Swing JFileChooser ile Dosya Bilgilerini Almak
- Java ile Twitter Bağlantısı
RSS Feed
13 Haziran 2010
fatih
Konu 
Teşekkür ederiz. Ama, gerekli açıklamaları niye Türkçe değilde ingilizce olarak gösterdiniz..
Merhaba,
Öncelikle yazınız için teşekkürler. Class’ı yazdım. Fakat mail gönderemedim. Sanırım soket oluştururken timeout oluyor. Oluşan hatalar aşağıdaki gibi.
at mail.MailClass.sendMail(MailClass.java:108)
at mail.MailClass.main(MailClass.java:122)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at java.net.Socket.connect(Socket.java:469)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:284)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:227)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)
Merhaba..Suan boyle bi proje yapiyorum ve sizin kodlarinizi gordum..Benim projemde Mail programi gibi olup evrak takip porgrami olucak yani kurum icerisinde birbirine mail gondermeyi amaclayan bi program.daha once onlar oracle ve pl/sql kodlari ile bi program olusturmuslar ama yeterli degilmis benden javada yapmami istediler ve ben javayi unuttum..bu proje icin netbeans yada myeclipse kullanacagim.bana programinizi gonderebilirmsiniz.ve bu kodlari hangi programda olusturdunuz ogrenebilir miyim?? birde benim netbeans de olusturdugum projede nereye koycagim bu kodlari index.jsf icerisine mi yoksa package olusturup onun icerisine mi koymam lazim calistirip gormek istiyorum…
tesekkur ederim
ingilizce kaynak arayanlar için faydali olmasi dilegiyle!
Arkadaşlar kendim kodları ingilizce olarak yazıyorum. Üniversiteden kalma bi alışkanlık bu. Bu kodu da daha önce yazmıştım ama üzerini düzenleyecek vaktim olmadığı için o sıralar, direk o şekilde yayına koymuştum.
Ama haklısınız bu bloğun amacı Java ile Türkçe kaynak eksikliğini gidermek olduğundan bundan sonra tüm açıklama ve kodların Türkçe olmasına özen göstereceğim.
Bu uygulamada amaç ne ben onu anlamadım tam olarak email içeriği kodun içerisinden tanımlanıyor gibi peki ekleri nasıl göstericez? Daha doğrusu uygulamada çalışmadı netbeans de hata gozukmuyordu.
Exception in thread “main” javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 25;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:317)
at javax.mail.Service.connect(Service.java:176)
at javax.mail.Service.connect(Service.java:125)
at javax.mail.Transport.send0(Transport.java:194)
at javax.mail.Transport.send(Transport.java:124)
at email.Email.sendMail(Email.java:89)
at email.Email.main(Email.java:113)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:288)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:231)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
… 8 more
Java Result: 1