kali ini gw mo kaih tutorial tentang cara mengirim email menggunakan spring-mail dan apache james. yang patut dipertanyakan kenapa pake spring-mail? dan kenapa juga pake apache james? 😀
jawabannya simpel aja. gw pake spring-mail karena dengan pake spring-mail proses kirim email jadi lebih mudah. dan apache james itu merupakan server mail opensource yang multiplatform dan mudah buat dipake. selain itu apache james sudah terbukti kehebatannya, lebih jelasnya liat artikel ini http://wiki.apache.org/james/JamesForYourBoss 😀pertama download dulu email server apache jamesnya di http://james.apache.org/index.html, setelah itu download yang james server, kalo dah didownload extrak hasil arsip downloadnya, setelah itu masuk ke folder bin lalu running file run.sh (kalo di linux) ato run.bat (kalo di windows) sampai terliahat seperti ini di terminal atau command :
Phoenix 4.2 James Mail Server 2.3.1 Remote Manager Service started plain:4555 POP3 Service started plain:110 SMTP Service started plain:25 NNTP Service started plain:119 FetchMail Disabled
artinya apache james server dah berjalan dan kita bisa konek ke server apache james lewat telnet. biasanya kalo di linux udah otomatis terinstall telnet dan kalo di windows vista harus install dulu telnetnya. disini gw anggap lo dah punya telnet yang terinstall di terminal ato command.
setelah itu masuk ke terminal atau command lalu ketik “telnet localhot 4555” maka otomatis akan terkoneksi ke server james trus waktu diminta username ama password masukkan username root dan password root :
JAMES Remote Administration Tool 2.3.1 Please enter your login and password Login id: root Password: root Welcome root. HELP for a list of commands
sekarang kita buat user yang akan kita gunakan sebagai user untuk proses pengiriman email yang akan kita bikin nanti pake spring-mail , caranya dengan menggunakan perintah “adduser username password” :
adduser spring_mail james User spring_mail added
dari kode diatas gw bikin user dengan id “spring_mail” dan passwordnya “james”, sekarang tinggal kita masuk ke Spring nya, tapi sebelumnya kita harus punya javamail, karena itu inti dari email di java, jadi download dulu library untuk java mail di http://java.sun.com/products/javamail/
dan sekarang kita buat class untuk kirim email, untuk pengiriman email pake spring-mail kita pake class MailSender, lebih jelasnya liat aja di kode dibawah :
package com.echo.springjames.mail; import org.springframework.mail.MailSender; import org.springframework.mail.SimpleMailMessage; public class KirimEmail { private MailSender mailSender; public void setMailSender(MailSender mailSender) { this.mailSender = mailSender; } public void sendEmail(String to, String from, String subject, String content) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setFrom(from); message.setSubject(subject); message.setText(content); mailSender.send(message); } }
setelah itu buat konfigurasi spring seperti dibawah ini :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean class="org.springframework.mail.javamail.JavaMailSenderImpl" id="mailSender"> <property name="host" value="localhost"/> <property name="port" value="25"/> <property name="username" value="spring_mail"/> <property name="password" value="james"/> </bean> <bean class="com.echo.springjames.mail.KirimEmail" id="kirimEmail"> <property name="mailSender" ref="mailSender"/> </bean> </beans>
untuk implementasi MailSender kita gunakan JavaMailSenderImpl milik Spring-mail dan setelah itu kita inject ke objek class KirimEmail yang sebelumnya kita buat, nah sekarang buat class utama untuk mengirim email, semial seperti dibawah ini :
package com.echo.springjames; import com.echo.springjames.mail.KirimEmail; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.ctx.xml"); KirimEmail kirimEmail = (KirimEmail) context.getBean("kirimEmail"); String to = "echo.khannedy@gmail.com"; String from = "spring@james.com"; String subject = "Hello Eko..."; String content = "Hello Eko, How Are You?"; kirimEmail.sendEmail(to, from, subject, content); } }
setelah class utama diatas dijalankan, maka akan ada email masuk ke email tujuan, yang misal dari contoh diatas gw kirim ke email gw sendiri 😀
hmm kayaknya barbar banget! gw suka!!!!!
kok tetep ada error ya pak…
isinya kayak gini :
May 31, 2009 3:01:15 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@bf32c: display name [org.springframework.context.support.ClassPathXmlApplicationContext@bf32c]; startup date [Sun May 31 03:01:15 ICT 2009]; root of context hierarchy
May 31, 2009 3:01:16 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.ctx.xml]
May 31, 2009 3:01:16 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@bf32c]: org.springframework.beans.factory.support.DefaultListableBeanFactory@72ffb
May 31, 2009 3:01:16 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@72ffb: defining beans [mailSender,kirimEmail]; root of factory hierarchy
++ emailnya jg kagak kekirim…
kira2 kenapa ya…??
trus disini dimananya digunakan java mail,kayaknya kok gak dipanggil sama skli ya class2nya…maaf…..mohon pencerahannya om eko…
itu sama sekali gak error
itu cuma [INFO]
coba web di SPAM mungkin masuk ke SPAM
gak ke INBOX
tetap error pak..
nih isi nya:
Jun 29, 2009 4:06:48 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@133f1d7: display name [org.springframework.context.support.ClassPathXmlApplicationContext@133f1d7]; startup date [Mon Jun 29 16:06:48 ICT 2009]; root of context hierarchy
Jun 29, 2009 4:06:48 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.ctx.xml]
Exception in thread “main” org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring.ctx.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring.ctx.xml] cannot be opened because it does not exist
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:320)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:290)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:158)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:184)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:112)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:79)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:97)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:411)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:338)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:122)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:66)
at com.echo.springjames.mail.Main.main(Main.java:10)
Caused by: java.io.FileNotFoundException: class path resource [spring.ctx.xml] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:142)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:307)
… 12 more
Java Result: 1
kenapa ya pak??
mohon bimbingannya…
thx..
jelaskan erornya :
Caused by: java.io.FileNotFoundException: class path resource [spring.ctx.xml]
artinya file spring.ctx.xml nya gak ditemuin
coba simpan filenya di direktori paket teratas
setelah saya ubah2…
tapi tetep aja error cuma isinya beda
nih isi nya :
Jun 29, 2009 4:21:29 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@133f1d7: display name [org.springframework.context.support.ClassPathXmlApplicationContext@133f1d7]; startup date [Mon Jun 29 16:21:29 ICT 2009]; root of context hierarchy
Jun 29, 2009 4:21:29 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.ctx.xml]
Jun 29, 2009 4:21:30 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@133f1d7]: org.springframework.beans.factory.support.DefaultListableBeanFactory@a6aeed
Jun 29, 2009 4:21:30 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a6aeed: defining beans [mailSender,kirimEmail]; root of factory hierarchy
Jun 29, 2009 4:21:30 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a6aeed: defining beans [mailSender,kirimEmail]; root of factory hierarchy
Exception in thread “main” org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘mailSender’ defined in class path resource [spring.ctx.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/mail/MessagingException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:917)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:873)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:485)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:169)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:170)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:413)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:735)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:369)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:122)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:66)
at com.echo.springjames.Main.main(Main.java:10)
Caused by: java.lang.NoClassDefFoundError: javax/mail/MessagingException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
at java.lang.Class.getConstructor0(Class.java:2699)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:911)
… 15 more
Java Result: 1
errornya kan : ava.lang.NoClassDefFoundError: javax/mail/MessagingException
artonya class itu gak ditemukan
coba includin library JavaMail
Eror trus nh pak,,padahal udah saya includin smua tuh library yang dibutuhin
kaya gni nh pak erornya,,
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.springframework.util.ClassUtils.(ClassUtils.java:73)
at org.springframework.core.io.DefaultResourceLoader.(DefaultResourceLoader.java:52)
at org.springframework.context.support.AbstractApplicationContext.(AbstractApplicationContext.java:198)
at org.springframework.context.support.AbstractRefreshableApplicationContext.(AbstractRefreshableApplicationContext.java:80)
at org.springframework.context.support.AbstractXmlApplicationContext.(AbstractXmlApplicationContext.java:58)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:119)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:66)
at Mail.Main.main(Main.java:12)
at Mail.__SHELL7.run(__SHELL7.java:6)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at bluej.runtime.ExecServer$3.run(ExecServer.java:858)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
… 14 more
kan sudah jelas errornya :
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
download dulu library Apache Common Logging nya
mas saya mau tanyak email saya tidak ke kirim saya coba di gmail sama yahoo juga tidak ada…
oh iya yang saya tanyakan di class kirim mail ada mehod setmail….
method itu di gunakan buat apa yah? dan di panggiul dimna?
terima kasih.
pesannya
03 Mei 10 15:08:43 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@169e11: display name [org.springframework.context.support.ClassPathXmlApplicationContext@169e11]; startup date [Mon May 03 15:08:43 ICT 2010]; root of context hierarchy
03 Mei 10 15:08:43 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [email.xml]
03 Mei 10 15:08:43 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@169e11]: org.springframework.beans.factory.support.DefaultListableBeanFactory@15a0305
03 Mei 10 15:08:43 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@15a0305: defining beans [mailSender,kirimEmail]; root of factory hierarchy
BUILD SUCCESSFUL (total time: 1 second)
mas eko, mau nanya cara config JAMES mail server supaya mail bisa outgoing ke internet,,,gimana ya ???
Help errornya dimana ya??
Sep 19, 2012 5:18:49 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@af72d8: display name [org.springframework.context.support.ClassPathXmlApplicationContext@af72d8]; startup date [Wed Sep 19 17:18:49 ICT 2012]; root of context hierarchy
Sep 19, 2012 5:18:49 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring.ctx.xml]
Sep 19, 2012 5:18:49 PM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@af72d8]: org.springframework.beans.factory.support.DefaultListableBeanFactory@8c4559
Sep 19, 2012 5:18:49 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@8c4559: defining beans [mailSender,kirimEmail]; root of factory hierarchy
BUILD SUCCESSFUL (total time: 0 seconds)