2008-09-05 3 views
179

क्या जीमेल खाते का उपयोग कर मेरे जावा एप्लिकेशन से एक ईमेल भेजना संभव है? मैंने ईमेल भेजने के लिए जावा ऐप के साथ अपना कंपनी मेल सर्वर कॉन्फ़िगर किया है, लेकिन जब मैं एप्लिकेशन वितरित करता हूं तो यह कटौती नहीं करेगा। किसी भी हॉटमेल, याहू या जीमेल का उपयोग करने के साथ उत्तर स्वीकार्य हैं।जीमेल, याहू, या हॉटमेल का उपयोग कर जावा एप्लिकेशन द्वारा मैं एक ईमेल कैसे भेज सकता हूं?

उत्तर

163

पहले डाउनलोड JavaMail API और सुनिश्चित करें कि प्रासंगिक जार फ़ाइलें आपके क्लासपाथ में हैं।

यहां जीमेल का उपयोग कर एक पूर्ण कामकाजी उदाहरण है।

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class Main { 

    private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com") 
    private static String PASSWORD = "********"; // GMail password 
    private static String RECIPIENT = "[email protected]"; 

    public static void main(String[] args) { 
     String from = USER_NAME; 
     String pass = PASSWORD; 
     String[] to = { RECIPIENT }; // list of recipient email addresses 
     String subject = "Java send mail example"; 
     String body = "Welcome to JavaMail!"; 

     sendFromGMail(from, pass, to, subject, body); 
    } 

    private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) { 
     Properties props = System.getProperties(); 
     String host = "smtp.gmail.com"; 
     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"); 

     Session session = Session.getDefaultInstance(props); 
     MimeMessage message = new MimeMessage(session); 

     try { 
      message.setFrom(new InternetAddress(from)); 
      InternetAddress[] toAddress = new InternetAddress[to.length]; 

      // To get the array of addresses 
      for(int i = 0; i < to.length; i++) { 
       toAddress[i] = new InternetAddress(to[i]); 
      } 

      for(int i = 0; i < toAddress.length; i++) { 
       message.addRecipient(Message.RecipientType.TO, toAddress[i]); 
      } 

      message.setSubject(subject); 
      message.setText(body); 
      Transport transport = session.getTransport("smtp"); 
      transport.connect(host, from, pass); 
      transport.sendMessage(message, message.getAllRecipients()); 
      transport.close(); 
     } 
     catch (AddressException ae) { 
      ae.printStackTrace(); 
     } 
     catch (MessagingException me) { 
      me.printStackTrace(); 
     } 
    } 
} 

स्वाभाविक रूप से, आप catch ब्लॉकों में अधिक करने के लिए की तुलना में स्टैक ट्रेस प्रिंट के रूप में मैं ऊपर के उदाहरण कोड में किया था चाहता हूँ। @jodonnel और बाकी सब जो जवाब करने के लिए (जो विधि JavaMail एपीआई फेंक अपवाद से कॉल ताकि आप बेहतर देख सकते हैं कि ठीक से उन्हें संभालने के लिए देखने के लिए catch ब्लॉक निकालें।)


धन्यवाद। मैं उसे एक बक्षीस दे रहा हूं क्योंकि उसके जवाब ने मुझे पूर्ण जवाब के लिए लगभग 9 5% रास्ता तय किया।

+0

छिपकली - क्या हमें इसके लिए एक पोर्ट अग्रेषित करने की आवश्यकता है ??? props.put ("mail.smtp.port", "587"); इस बंदरगाह को खोला जाना है ?? – Varun

+1

@ वारुन: यह आउटगोइंग मेल सर्वर, 'smtp.gmail.com' पर बंदरगाह है। विवरण के लिए [अन्य मेल क्लाइंट कॉन्फ़िगर करना] देखें (http://mail.google.com/support/bin/answer.py?answer=13287)। –

+1

क्या मैं अकेला हूं जो प्रमाणीकरण FailedException यहां props.put ("mail.smtp.auth", "true") प्राप्त करता है; अगर सच स्ट्रिंग है। यह ठीक है अगर यह एक बुलियन है। – nyxz

0

पीओपी 3 एक्सेस के लिए जीमेल खाता कॉन्फ़िगर/सक्षम होना एक आसान मार्ग होगा। यह आपको जीमेल सर्वर के माध्यम से सामान्य एसएमटीपी के माध्यम से भेजने की अनुमति देगा।

तो फिर तुम बस (पोर्ट 587 पर) smtp.gmail.com के माध्यम से भेजना चाहते हैं

106

इस तरह कुछ (लगता है कि आप सिर्फ आपके एसएमटीपी सर्वर बदलने की जरूरत है):

String host = "smtp.gmail.com"; 
String from = "user name"; 
Properties props = System.getProperties(); 
props.put("mail.smtp.host", host); 
props.put("mail.smtp.user", from); 
props.put("mail.smtp.password", "asdfgh"); 
props.put("mail.smtp.port", "587"); // 587 is the port number of yahoo mail 
props.put("mail.smtp.auth", "true"); 

Session session = Session.getDefaultInstance(props, null); 
MimeMessage message = new MimeMessage(session); 
message.setFrom(new InternetAddress(from)); 

InternetAddress[] to_address = new InternetAddress[to.length]; 
int i = 0; 
// To get the array of addresses 
while (to[i] != null) { 
    to_address[i] = new InternetAddress(to[i]); 
    i++; 
} 
System.out.println(Message.RecipientType.TO); 
i = 0; 
while (to_address[i] != null) { 

    message.addRecipient(Message.RecipientType.TO, to_address[i]); 
    i++; 
} 
message.setSubject("sending in a group"); 
message.setText("Welcome to JavaMail"); 
// alternately, to send HTML mail: 
// message.setContent("<p>Welcome to JavaMail</p>", "text/html"); 
Transport transport = session.getTransport("smtp"); 
transport.connect("smtp.mail.yahoo.co.in", "user name", "asdfgh"); 
transport.sendMessage(message, message.getAllRecipients()); 
transport.close(); 
+0

क्या सामग्री को HTML के रूप में भेजना संभव है? अगर मैं कुछ एचटीएमएल कोड लिखने और इसे भेजने की कोशिश करता हूं, लेकिन अंत में, ईमेल की सामग्री केवल एचटीएमएल कोड है। –

+4

स्पष्ट टेक्स्ट के बजाय एचटीएमएल बॉडी भेजने के लिए इस लाइन को बदलें: 'message.setText (" जावामेल में आपका स्वागत है "); 'इस लाइन के साथ:' message.setContent ("

हैलो वर्ल्ड

"," टेक्स्ट/एचटीएमएल ");' – mist

+4

यह एक गायब है ("mail.smtp.starttls.enable", "true") – Sotomajor

13

हालांकि इस सवाल का बंद कर दिया है, मैं एक काउंटर समाधान पोस्ट करना चाहते हैं, लेकिन अब Simple Java Mail (मुक्त स्रोत JavaMail smtp आवरण) का उपयोग:

final Email email = new Email(); 

String host = "smtp.gmail.com"; 
Integer port = 587; 
String from = "username"; 
String pass = "password"; 
String[] to = {"[email protected]"}; 

email.setFromAddress("", from); 
email.setSubject("sending in a group"); 
for(int i=0; i < to.length; i++) { 
    email.addRecipient("", to[i], RecipientType.TO); 
} 
email.setText("Welcome to JavaMail"); 

new Mailer(host, port, from, pass).sendMail(email); 
// you could also still use your mail session instead 
new Mailer(session).sendMail(email); 
+2

मुझे उस कोड के साथ एक त्रुटि मिल रही है: "संदेश: जेनेरिक त्रुटि: 530 5.7.0 पहले STARTTLS कमांड जारी करना होगा" - आप vesijama के साथ स्टार्टल को कैसे सक्षम करते हैं? – iddqd

+1

मुझे "STARTTLS कमांड जारी करना होगा" त्रुटि प्राप्त हुई क्योंकि नीचे दी गई पंक्ति में IStartTlsEnabled चर को एक बूलियन के रूप में, एक स्ट्रिंग के रूप में: props.put ("mail.smtp.starttls.enable", isStartTlsEnabled) था; – user64141

+0

[इस उत्तर] से (http://stackoverflow.com/a/31974869/441662): टीएलएस का उपयोग करने के लिए, आप कुछ नया मेलर (आपका लॉगिन/आपका सत्र, TransportStrategy.SMTP_TLS) कर सकते हैं। SendMail (ईमेल) ; ' –

1

यह मैं क्या कर जब मैं भेजना चाहते है अनुलग्नक के साथ ईमेल, ठीक काम करते हैं। :)

public class NewClass { 

    public static void main(String[] args) { 
     try { 
      Properties props = System.getProperties(); 
      props.put("mail.smtp.starttls.enable", "true"); 
      props.put("mail.smtp.host", "smtp.gmail.com"); 
      props.put("mail.smtp.auth", "true"); 
      props.put("mail.smtp.port", "465"); // smtp port 
      Authenticator auth = new Authenticator() { 

       @Override 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication("username-gmail", "password-gmail"); 
       } 
      }; 
      Session session = Session.getDefaultInstance(props, auth); 
      MimeMessage msg = new MimeMessage(session); 
      msg.setFrom(new InternetAddress("[email protected]")); 
      msg.setSubject("Try attachment gmail"); 
      msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]")); 
      //add atleast simple body 
      MimeBodyPart body = new MimeBodyPart(); 
      body.setText("Try attachment"); 
      //do attachment 
      MimeBodyPart attachMent = new MimeBodyPart(); 
      FileDataSource dataSource = new FileDataSource(new File("file-sent.txt")); 
      attachMent.setDataHandler(new DataHandler(dataSource)); 
      attachMent.setFileName("file-sent.txt"); 
      attachMent.setDisposition(MimeBodyPart.ATTACHMENT); 
      Multipart multipart = new MimeMultipart(); 
      multipart.addBodyPart(body); 
      multipart.addBodyPart(attachMent); 
      msg.setContent(multipart); 
      Transport.send(msg); 
     } catch (AddressException ex) { 
      Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (MessagingException ex) { 
      Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 
20

अन्य लोगों के ऊपर अच्छे उत्तर हैं, लेकिन मैं यहां अपने अनुभव पर एक नोट जोड़ना चाहता था। मैंने पाया है कि जीमेल का उपयोग मेरे वेबएप के लिए आउटबाउंड एसएमटीपी सर्वर के रूप में करते समय, जीमेल केवल मुझे एंटी-स्पैम प्रतिक्रिया के जवाब देने से पहले ~ 10 या तो संदेश भेजने देता है जिसे मुझे मैन्युअल रूप से एसएमटीपी एक्सेस को पुनः सक्षम करने के लिए कदम उठाना पड़ता है। मैं जो ईमेल भेज रहा था वह स्पैम नहीं था, लेकिन जब उपयोगकर्ता मेरे सिस्टम के साथ पंजीकृत थे तो वेबसाइट "स्वागत" ईमेल थीं। तो, वाईएमएमवी, और मैं एक उत्पादन वेबपैप के लिए जीमेल पर भरोसा नहीं करता। यदि आप किसी उपयोगकर्ता की ओर से ईमेल भेज रहे हैं, जैसे एक स्थापित डेस्कटॉप ऐप (जहां उपयोगकर्ता अपने स्वयं के जीमेल प्रमाण-पत्रों में प्रवेश करता है), तो आप ठीक हो सकते हैं।

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="defaultEncoding" value="UTF-8"/> 
    <property name="host" value="smtp.gmail.com"/> 
    <property name="port" value="465"/> 
    <property name="username" value="${mail.username}"/> 
    <property name="password" value="${mail.password}"/> 
    <property name="javaMailProperties"> 
     <value> 
      mail.debug=true 
      mail.smtp.auth=true 
      mail.smtp.socketFactory.class=java.net.SocketFactory 
      mail.smtp.socketFactory.fallback=false 
     </value> 
    </property> 
</bean> 
+0

धन्यवाद जेसन, कॉन्फ़िगरेशन सेटिंग्स उदाहरण के लिए और आउटबाउंड मेल सीमाओं के बारे में चेतावनी के लिए। मैंने पहले सीमा में कभी नहीं भाग लिया है, लेकिन मुझे यकीन है कि अन्य लोग उस जानकारी को उपयोगी पाएंगे। –

+0

मैं उस स्पैम सीमा के बारे में अधिक जानना चाहता हूं ... मुझे कई ईमेल भेजना है, क्या मुझे उन्हें समूहों में विभाजित करना चाहिए? निर्दिष्ट समय के लिए प्रतीक्षा करें? किसी को भी Google मेल सीमाओं के विवरण पता है? – opensas

3
//set CLASSPATH=%CLASSPATH%;activation.jar;mail.jar 
import javax.mail.*; 
import javax.mail.internet.*; 
import java.util.*; 

public class Mail 
{ 
    String d_email = "[email protected]", 
      d_password = "****", 
      d_host = "smtp.gmail.com", 
      d_port = "465", 
      m_to = "[email protected]", 
      m_subject = "Testing", 
      m_text = "Hey, this is the testing email using smtp.gmail.com."; 
    public static void main(String[] args) 
    { 
     String[] to={"[email protected]"}; 
     String[] cc={"[email protected]"}; 
     String[] bcc={"[email protected]"}; 
     //This is for google 
     Mail.sendMail("[email protected]", "password", "smtp.gmail.com", 
         "465", "true", "true", 
         true, "javax.net.ssl.SSLSocketFactory", "false", 
         to, cc, bcc, 
         "hi baba don't send virus mails..", 
         "This is my style...of reply..If u send virus mails.."); 
    } 

    public synchronized static boolean sendMail(
     String userName, String passWord, String host, 
     String port, String starttls, String auth, 
     boolean debug, String socketFactoryClass, String fallback, 
     String[] to, String[] cc, String[] bcc, 
     String subject, String text) 
    { 
     Properties props = new Properties(); 
     //Properties props=System.getProperties(); 
     props.put("mail.smtp.user", userName); 
     props.put("mail.smtp.host", host); 
     if(!"".equals(port)) 
      props.put("mail.smtp.port", port); 
     if(!"".equals(starttls)) 
      props.put("mail.smtp.starttls.enable",starttls); 
     props.put("mail.smtp.auth", auth); 
     if(debug) { 
      props.put("mail.smtp.debug", "true"); 
     } else { 
      props.put("mail.smtp.debug", "false");   
     } 
     if(!"".equals(port)) 
      props.put("mail.smtp.socketFactory.port", port); 
     if(!"".equals(socketFactoryClass)) 
      props.put("mail.smtp.socketFactory.class",socketFactoryClass); 
     if(!"".equals(fallback)) 
      props.put("mail.smtp.socketFactory.fallback", fallback); 

     try 
     { 
      Session session = Session.getDefaultInstance(props, null); 
      session.setDebug(debug); 
      MimeMessage msg = new MimeMessage(session); 
      msg.setText(text); 
      msg.setSubject(subject); 
      msg.setFrom(new InternetAddress("[email protected]")); 
      for(int i=0;i<to.length;i++) { 
       msg.addRecipient(Message.RecipientType.TO, 
           new InternetAddress(to[i])); 
      } 
      for(int i=0;i<cc.length;i++) { 
       msg.addRecipient(Message.RecipientType.CC, 
           new InternetAddress(cc[i])); 
      } 
      for(int i=0;i<bcc.length;i++) { 
       msg.addRecipient(Message.RecipientType.BCC, 
           new InternetAddress(bcc[i])); 
      } 
      msg.saveChanges(); 
      Transport transport = session.getTransport("smtp"); 
      transport.connect(host, userName, passWord); 
      transport.sendMessage(msg, msg.getAllRecipients()); 
      transport.close(); 
      return true; 
     } 
     catch (Exception mex) 
     { 
      mex.printStackTrace(); 
      return false; 
     } 
    } 

} 
+3

मुझे php कोड की तरह लगता है ... – Jamol

5

मेरे पूरा के रूप में नीचे दिए गए कोड में अच्छी तरह से काम कर रहा है:

package ripon.java.mail; 
import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 

public class SendEmail 
{ 
public static void main(String [] args) 
{  
    // Sender's email ID needs to be mentioned 
    String from = "[email protected]"; 
    String pass ="test123"; 
    // Recipient's email ID needs to be mentioned. 
    String to = "[email protected]"; 

    String host = "smtp.gmail.com"; 

    // Get system properties 
    Properties properties = System.getProperties(); 
    // Setup mail server 
    properties.put("mail.smtp.starttls.enable", "true"); 
    properties.put("mail.smtp.host", host); 
    properties.put("mail.smtp.user", from); 
    properties.put("mail.smtp.password", pass); 
    properties.put("mail.smtp.port", "587"); 
    properties.put("mail.smtp.auth", "true"); 

    // Get the default Session object. 
    Session session = Session.getDefaultInstance(properties); 

    try{ 
     // Create a default MimeMessage object. 
     MimeMessage message = new MimeMessage(session); 

     // Set From: header field of the header. 
     message.setFrom(new InternetAddress(from)); 

     // Set To: header field of the header. 
     message.addRecipient(Message.RecipientType.TO, 
           new InternetAddress(to)); 

     // Set Subject: header field 
     message.setSubject("This is the Subject Line!"); 

     // Now set the actual message 
     message.setText("This is actual message"); 

     // Send message 
     Transport transport = session.getTransport("smtp"); 
     transport.connect(host, from, pass); 
     transport.sendMessage(message, message.getAllRecipients()); 
     transport.close(); 
     System.out.println("Sent message successfully...."); 
    }catch (MessagingException mex) { 
     mex.printStackTrace(); 
    } 
} 
} 
+1

आप नीचे से सभी तरह से हैं लेकिन मुझे तुम्हारा सबसे अच्छा पसंद आया! बहुत अच्छा कोड धन्यवाद। – gmustudent

+0

धन्यवाद gmustudent –

2

इसके अलावा, अगर आप वसंत का उपयोग कर रहे हैं, यहाँ एक काम आउटबाउंड SMTP के लिए Gmail का उपयोग करने config है पोस्ट कोड समाधान समस्याएं पैदा कर सकते हैं जब आपको एक ही JVM के भीतर कहीं भी कई SMTP सत्र सेट अप करने की आवश्यकता होती है।

JavaMail पूछे जाने वाले प्रश्न का उपयोग कर

Session.getDefaultInstance(properties); 

के बजाय

Session.getInstance(properties); 

क्योंकि getDefault केवल पहली बार यह शुरू हो जाती है को देखते हुए गुण का उपयोग करेगा सिफारिश की। डिफ़ॉल्ट उदाहरण के बाद के सभी उपयोग संपत्ति परिवर्तनों को अनदेखा करेंगे।

http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance

+0

बहुत अच्छा बिंदु – Alix

0

हाय इस कोड की कोशिश देखें ....

package my.test.service; 

import java.util.Properties; 

import javax.mail.Authenticator; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Message; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class Sample { 
    public static void main(String args[]) { 
     final String SMTP_HOST = "smtp.gmail.com"; 
     final String SMTP_PORT = "587"; 
     final String GMAIL_USERNAME = "[email protected]"; 
     final String GMAIL_PASSWORD = "xxxxxxxxxx"; 

     System.out.println("Process Started"); 

     Properties prop = System.getProperties(); 
     prop.setProperty("mail.smtp.starttls.enable", "true"); 
     prop.setProperty("mail.smtp.host", SMTP_HOST); 
     prop.setProperty("mail.smtp.user", GMAIL_USERNAME); 
     prop.setProperty("mail.smtp.password", GMAIL_PASSWORD); 
     prop.setProperty("mail.smtp.port", SMTP_PORT); 
     prop.setProperty("mail.smtp.auth", "true"); 
     System.out.println("Props : " + prop); 

     Session session = Session.getInstance(prop, new Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication(GMAIL_USERNAME, 
         GMAIL_PASSWORD); 
      } 
     }); 

     System.out.println("Got Session : " + session); 

     MimeMessage message = new MimeMessage(session); 
     try { 
      System.out.println("before sending"); 
      message.setFrom(new InternetAddress(GMAIL_USERNAME)); 
      message.addRecipients(Message.RecipientType.TO, 
        InternetAddress.parse(GMAIL_USERNAME)); 
      message.setSubject("My First Email Attempt from Java"); 
      message.setText("Hi, This mail came from Java Application."); 
      message.setRecipients(Message.RecipientType.TO, 
        InternetAddress.parse(GMAIL_USERNAME)); 
      Transport transport = session.getTransport("smtp"); 
      System.out.println("Got Transport" + transport); 
      transport.connect(SMTP_HOST, GMAIL_USERNAME, GMAIL_PASSWORD); 
      transport.sendMessage(message, message.getAllRecipients()); 
      System.out.println("message Object : " + message); 
      System.out.println("Email Sent Successfully"); 
     } catch (AddressException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (MessagingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 
3

न्यूनतम आवश्यक: Gmail साथ ईमेल भेजने के लिए एक आसान से उपयोग वर्ग

import java.util.Properties; 

import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

public class MessageSender { 

    public static void sendHardCoded() throws AddressException, MessagingException { 
     String to = "[email protected]"; 
     final String from = "[email protected]"; 

     Properties properties = new Properties(); 
     properties.put("mail.smtp.starttls.enable", "true"); 
     properties.put("mail.smtp.auth", "true"); 
     properties.put("mail.smtp.host", "smtp.gmail.com"); 
     properties.put("mail.smtp.port", "587"); 

     Session session = Session.getInstance(properties, 
       new javax.mail.Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(from, "BeNice"); 
        } 
       }); 

     MimeMessage message = new MimeMessage(session); 
     message.setFrom(new InternetAddress(from)); 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
     message.setSubject("Hello"); 
     message.setText("What's up?"); 

     Transport.send(message); 
    } 

} 
+1

@ AlikElizin-kilaka मैं प्रेषक और प्राप्तकर्ता दोनों के लिए अपने जीमेल आईडी का उपयोग करने की कोशिश कर रहा था, पाया कि आपको अपने Google खाता सेटिंग्स में कम सुरक्षित ऐप्स ध्वज को चालू करने की भी आवश्यकता है, क्योंकि आप हैं कम जीमेल प्रोफाइल को कम सुरक्षित तरीके से एक्सेस करना। फिर केवल आप जावा क्लाइंट से भेजे गए ईमेल को देख सकते हैं। अन्यथा आपको javax.mail.AuthenticationFailedException मिलता है। – kunal

0

यहाँ है। आपको JavaMail लाइब्रेरी added to your build path या केवल Maven का उपयोग करने की आवश्यकता है।

import java.util.Properties; 

import javax.activation.DataHandler; 
import javax.activation.DataSource; 
import javax.activation.FileDataSource; 
import javax.mail.BodyPart; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 

public class GmailSender 
{ 
    private static String protocol = "smtp"; 

    private String username; 
    private String password; 

    private Session session; 
    private Message message; 
    private Multipart multipart; 

    public GmailSender() 
    { 
     this.multipart = new MimeMultipart(); 
    } 

    public void setSender(String username, String password) 
    { 
     this.username = username; 
     this.password = password; 

     this.session = getSession(); 
     this.message = new MimeMessage(session); 
    } 

    public void addRecipient(String recipient) throws AddressException, MessagingException 
    { 
     message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); 
    } 

    public void setSubject(String subject) throws MessagingException 
    { 
     message.setSubject(subject); 
    } 

    public void setBody(String body) throws MessagingException 
    { 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     messageBodyPart.setText(body); 
     multipart.addBodyPart(messageBodyPart); 

     message.setContent(multipart); 
    } 

    public void send() throws MessagingException 
    { 
     Transport transport = session.getTransport(protocol); 
     transport.connect(username, password); 
     transport.sendMessage(message, message.getAllRecipients()); 

     transport.close(); 
    } 

    public void addAttachment(String filePath) throws MessagingException 
    { 
     BodyPart messageBodyPart = getFileBodyPart(filePath); 
     multipart.addBodyPart(messageBodyPart); 

     message.setContent(multipart); 
    } 

    private BodyPart getFileBodyPart(String filePath) throws MessagingException 
    { 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     DataSource dataSource = new FileDataSource(filePath); 
     messageBodyPart.setDataHandler(new DataHandler(dataSource)); 
     messageBodyPart.setFileName(filePath); 

     return messageBodyPart; 
    } 

    private Session getSession() 
    { 
     Properties properties = getMailServerProperties(); 
     Session session = Session.getDefaultInstance(properties); 

     return session; 
    } 

    private Properties getMailServerProperties() 
    { 
     Properties properties = System.getProperties(); 
     properties.put("mail.smtp.starttls.enable", "true"); 
     properties.put("mail.smtp.host", protocol + ".gmail.com"); 
     properties.put("mail.smtp.user", username); 
     properties.put("mail.smtp.password", password); 
     properties.put("mail.smtp.port", "587"); 
     properties.put("mail.smtp.auth", "true"); 

     return properties; 
    } 
} 

उदाहरण उपयोग:

GmailSender sender = new GmailSender(); 
sender.setSender("[email protected]", "mypassword"); 
sender.addRecipient("[email protected]"); 
sender.setSubject("The subject"); 
sender.setBody("The body"); 
sender.addAttachment("TestFile.txt"); 
sender.send(); 
0

आप Javamail API साथ Outlook का उपयोग करना चाहते हैं तो अधिक है और पूरा काम कर कोड Check out this answer के लिए एक मेजबान रूप

smtp-mail.outlook.com 

का उपयोग करें।

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/14714106) – Sid

+0

मैंने यहां आवश्यक हिस्सा पोस्ट किया है। यहां आवश्यक आवश्यक कोड को देखने के लिए होस्ट नाम है जो –

+0

उत्तर में है। और वापस लाया। – Sid

संबंधित मुद्दे

 संबंधित मुद्दे