दिलचस्प पोस्ट
Guzzlehttp – कैसे गजले 6 से प्रतिक्रिया का शरीर मिलता है? क्या मुझे FileReader और BufferedReader दोनों को बंद करने की आवश्यकता है? क्या अन्यथा से प्राप्त या अधिक सुरक्षित है? क्या सीएसएस को एक आधे चरित्र में लागू करना संभव है? अपलोड करने से पहले जावास्क्रिप्ट के साथ फ़ाइल माइम प्रकार की जांच कैसे करें? मैं कैसे जांचूं अगर stdin के पास कुछ डेटा है? आईआईएस एक्सप्रेस को प्रोग्रामिंग शुरू करना और रोकना मूल ग्राफ़िक्स में प्लॉटिंग क्षेत्र के बाहर एक किंवदंती बनाएं? केवल डिबग बिल्ड के लिए विजुअल स्टूडियो पोस्ट-बिल्ड इवेंट कैसे चलाएं JS / jQuery में एक कुंजीपेज / कुंजीडाउन / कीप इवेंट ट्रिगर करें? अभिविन्यास परिवर्तन पर एक वेब पेज को पुन: प्रस्तुत करने का सबसे अच्छा तरीका क्या है? मेरी विशेषता में गतिशील मान कैसे सेट करें जीआईटी बैश का सटीक अर्थ क्या है? सी ++ में कुशल स्ट्रिंग कन्टेनटेनेशन क्या यह तय करने का कोई तरीका है कि आईफोन रोमिंग है या नहीं?

जावा का उपयोग करके ईमेल भेजें

मैं जावा का उपयोग कर एक ईमेल भेजने की कोशिश कर रहा हूं:

import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendEmail { public static void main(String [] args) { // Recipient's email ID needs to be mentioned. String to = "abcd@gmail.com"; // Sender's email ID needs to be mentioned String from = "web@gmail.com"; // Assuming you are sending email from localhost String host = "localhost"; // Get system properties Properties properties = System.getProperties(); // Setup mail server properties.setProperty("mail.smtp.host", host); // 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.send(message); System.out.println("Sent message successfully...."); }catch (MessagingException mex) { mex.printStackTrace(); } } } 

मुझे त्रुटि मिल रही है:

 javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25; nested exception is:java.net.ConnectException: Connection refused: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525) 

क्या यह कोड ईमेल भेजने के लिए काम करेगा?

वेब के समाधान से एकत्रित समाधान "जावा का उपयोग करके ईमेल भेजें"

निम्न कोड Google SMTP सर्वर के साथ बहुत अच्छी तरह से काम करता है आपको अपना Google उपयोगकर्ता नाम और पासवर्ड प्रदान करना होगा

 import com.sun.mail.smtp.SMTPTransport; import java.security.Security; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * * @author doraemon */ public class GoogleMail { private GoogleMail() { } /** * Send email using GMail SMTP server. * * @param username GMail username * @param password GMail password * @param recipientEmail TO recipient * @param title title of the message * @param message message to be sent * @throws AddressException if the email address parse failed * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage */ public static void Send(final String username, final String password, String recipientEmail, String title, String message) throws AddressException, MessagingException { GoogleMail.Send(username, password, recipientEmail, "", title, message); } /** * Send email using GMail SMTP server. * * @param username GMail username * @param password GMail password * @param recipientEmail TO recipient * @param ccEmail CC recipient. Can be empty if there is no CC recipient * @param title title of the message * @param message message to be sent * @throws AddressException if the email address parse failed * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage */ public static void Send(final String username, final String password, String recipientEmail, String ccEmail, String title, String message) throws AddressException, MessagingException { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; // Get a Properties object Properties props = System.getProperties(); props.setProperty("mail.smtps.host", "smtp.gmail.com"); props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); props.setProperty("mail.smtps.auth", "true"); /* If set to false, the QUIT command is sent and the connection is immediately closed. If set to true (the default), causes the transport to wait for the response to the QUIT command. ref : http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html http://forum.java.sun.com/thread.jspa?threadID=5205249 smtpsend.java - demo program from javamail */ props.put("mail.smtps.quitwait", "false"); Session session = Session.getInstance(props, null); // -- Create a new message -- final MimeMessage msg = new MimeMessage(session); // -- Set the FROM and TO fields -- msg.setFrom(new InternetAddress(username + "@gmail.com")); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false)); if (ccEmail.length() > 0) { msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false)); } msg.setSubject(title); msg.setText(message, "utf-8"); msg.setSentDate(new Date()); SMTPTransport t = (SMTPTransport)session.getTransport("smtps"); t.connect("smtp.gmail.com", username, password); t.sendMessage(msg, msg.getAllRecipients()); t.close(); } } 

11 दिसंबर 2015 को अपडेट करें

उपयोगकर्ता नाम + पासवर्ड अब अनुशंसित समाधान नहीं है। इसका कारण है

मैंने इसे करने की कोशिश की और जीमेल ने इस कोड में यूज़रनेम के रूप में इस्तेमाल किए गए ईमेल को भेजा, जिसमें कहा गया था कि हमने हाल ही में अपने Google खाते के एक साइन-इन प्रयास को अवरुद्ध किया है, और मुझे इस समर्थन पृष्ठ पर निर्देशित किया है: support.google.com/accounts/answer/6010255 इसलिए यह काम करने के लिए दिखता है, ई-मेल खाते को अपनी सुरक्षा को कम करने की जरूरतों को भेजने के लिए इस्तेमाल किया जा रहा है

Google ने जीमेल एपीआई को जारी किया था – https://developers.google.com/gmail/api/?hl=en हमें उपयोगकर्ता नाम + पासवर्ड के बजाय, oAuth2 विधि का उपयोग करना चाहिए

Gmail API के साथ काम करने के लिए यहां कोड स्निपेट है

GoogleMail.java

 import com.google.api.client.util.Base64; import com.google.api.services.gmail.Gmail; import com.google.api.services.gmail.model.Message; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * * @author doraemon */ public class GoogleMail { private GoogleMail() { } private static MimeMessage createEmail(String to, String cc, String from, String subject, String bodyText) throws MessagingException { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); MimeMessage email = new MimeMessage(session); InternetAddress tAddress = new InternetAddress(to); InternetAddress cAddress = cc.isEmpty() ? null : new InternetAddress(cc); InternetAddress fAddress = new InternetAddress(from); email.setFrom(fAddress); if (cAddress != null) { email.addRecipient(javax.mail.Message.RecipientType.CC, cAddress); } email.addRecipient(javax.mail.Message.RecipientType.TO, tAddress); email.setSubject(subject); email.setText(bodyText); return email; } private static Message createMessageWithEmail(MimeMessage email) throws MessagingException, IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); email.writeTo(baos); String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray()); Message message = new Message(); message.setRaw(encodedEmail); return message; } public static void Send(Gmail service, String recipientEmail, String ccEmail, String fromEmail, String title, String message) throws IOException, MessagingException { Message m = createMessageWithEmail(createEmail(recipientEmail, ccEmail, fromEmail, title, message)); service.users().messages().send("me", m).execute(); } } 

OAuth2 के माध्यम से एक अधिकृत Gmail सेवा का निर्माण करने के लिए, यहां कोड स्निपेट है।

Utils.java

 import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.gmail.Gmail; import com.google.api.services.gmail.GmailScopes; import com.google.api.services.oauth2.Oauth2; import com.google.api.services.oauth2.model.Userinfoplus; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.nio.file.Files; import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.util.HashSet; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.yccheok.jstock.engine.Pair; /** * * @author yccheok */ public class Utils { /** Global instance of the JSON factory. */ private static final GsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); /** Global instance of the HTTP transport. */ private static HttpTransport httpTransport; private static final Log log = LogFactory.getLog(Utils.class); static { try { // initialize the transport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); } catch (IOException ex) { log.error(null, ex); } catch (GeneralSecurityException ex) { log.error(null, ex); } } private static File getGmailDataDirectory() { return new File(org.yccheok.jstock.gui.Utils.getUserDataDirectory() + "authentication" + File.separator + "gmail"); } /** * Send a request to the UserInfo API to retrieve the user's information. * * @param credentials OAuth 2.0 credentials to authorize the request. * @return User's information. * @throws java.io.IOException */ public static Userinfoplus getUserInfo(Credential credentials) throws IOException { Oauth2 userInfoService = new Oauth2.Builder(httpTransport, JSON_FACTORY, credentials).setApplicationName("JStock").build(); Userinfoplus userInfo = userInfoService.userinfo().get().execute(); return userInfo; } public static String loadEmail(File dataStoreDirectory) { File file = new File(dataStoreDirectory, "email"); try { return new String(Files.readAllBytes(Paths.get(file.toURI())), "UTF-8"); } catch (IOException ex) { log.error(null, ex); return null; } } public static boolean saveEmail(File dataStoreDirectory, String email) { File file = new File(dataStoreDirectory, "email"); try { //If the constructor throws an exception, the finally block will NOT execute BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8")); try { writer.write(email); } finally { writer.close(); } return true; } catch (IOException ex){ log.error(null, ex); return false; } } public static void logoutGmail() { File credential = new File(getGmailDataDirectory(), "StoredCredential"); File email = new File(getGmailDataDirectory(), "email"); credential.delete(); email.delete(); } public static Pair<Pair<Credential, String>, Boolean> authorizeGmail() throws Exception { // Ask for only the permissions you need. Asking for more permissions will // reduce the number of users who finish the process for giving you access // to their accounts. It will also increase the amount of effort you will // have to spend explaining to users what you are doing with their data. // Here we are listing all of the available scopes. You should remove scopes // that you are not actually using. Set<String> scopes = new HashSet<>(); // We would like to display what email this credential associated to. scopes.add("email"); scopes.add(GmailScopes.GMAIL_SEND); // load client secrets GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(Utils.JSON_FACTORY, new InputStreamReader(Utils.class.getResourceAsStream("/assets/authentication/gmail/client_secrets.json"))); return authorize(clientSecrets, scopes, getGmailDataDirectory()); } /** Authorizes the installed application to access user's protected data. * @return * @throws java.lang.Exception */ private static Pair<Pair<Credential, String>, Boolean> authorize(GoogleClientSecrets clientSecrets, Set<String> scopes, File dataStoreDirectory) throws Exception { // Set up authorization code flow. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, scopes) .setDataStoreFactory(new FileDataStoreFactory(dataStoreDirectory)) .build(); // authorize return new MyAuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } public static Gmail getGmail(Credential credential) { Gmail service = new Gmail.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName("JStock").build(); return service; } } 

ओअथ 2 प्रमाणीकरण के उपयोगकर्ता के अनुकूल तरीके प्रदान करने के लिए, मैंने निम्न इनपुट संवाद प्रदर्शित करने के लिए जावाएफएक्स का उपयोग किया

यहां छवि विवरण दर्ज करें

उपयोगकर्ता के अनुकूल ओएथ 2 संवाद को प्रदर्शित करने की कुंजी MyAuthorizationCodeInstalledApp.java और SimpleSwingBrowser.java में पाई जा सकती है

निम्नलिखित कोड मेरे लिए काम किया

 import java.io.UnsupportedEncodingException; 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 SendMail { public static void main(String[] args) { final String username = "your_user_name@gmail.com"; final String password = "yourpassword"; Properties props = new Properties(); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your_user_name@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to_email_address@domain.com")); message.setSubject("Testing Subject"); message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!"); Transport.send(message); System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); } } } 
 import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendEmail extends Object{ public static void main(String [] args) { try{ Properties props = new Properties(); props.put("mail.smtp.host", "smtp.mail.yahoo.com"); // for gmail use smtp.gmail.com props.put("mail.smtp.auth", "true"); props.put("mail.debug", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.port", "465"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); Session mailSession = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username@yahoo.com", "password"); } }); mailSession.setDebug(true); // Enable the debug mode Message msg = new MimeMessage( mailSession ); //--[ Set the FROM, TO, DATE and SUBJECT fields msg.setFrom( new InternetAddress( "fromusername@yahoo.com" ) ); msg.setRecipients( Message.RecipientType.TO,InternetAddress.parse("tousername@gmail.com") ); msg.setSentDate( new Date()); msg.setSubject( "Hello World!" ); //--[ Create the body of the mail msg.setText( "Hello from my first e-mail sent with JavaMail" ); //--[ Ask the Transport class to send our mail message Transport.send( msg ); }catch(Exception E){ System.out.println( "Oops something has gone pearshaped!"); System.out.println( E ); } } } 

आवश्यक जार फ़ाइलें

  • mail.jar
  • activation.jar
  • additionnal.jar

यहां क्लिक करें – बाहरी जारों को कैसे जोड़ें

संक्षिप्त जवाब – नहीं

लंबे उत्तर – नहीं, चूंकि यह कोड स्थानीय मशीन पर चल रहे एसएमटीपी सर्वर की मौजूदगी पर निर्भर करता है, और पोर्ट 25 पर सुन रहा है। एसएमटीपी सर्वर (तकनीकी तौर पर एमटीए या मेल ट्रांसफर एजेंट) मेल उपयोगकर्ता एजेंट से संचार के लिए उत्तरदायी है (एमयूए, जो इस मामले में जावा प्रक्रिया है) आउटगोइंग ईमेल प्राप्त करने के लिए।

अब, एमटीए आम तौर पर किसी विशिष्ट डोमेन के लिए उपयोगकर्ताओं से मेल प्राप्त करने के लिए जिम्मेदार होते हैं। इसलिए, डोमेन gmail.com के लिए, यह Google मेल सर्वर होगा जो मेल उपयोगकर्ता एजेंटों को प्रमाणित करने के लिए ज़िम्मेदार हैं और इसलिए Gmail के सर्वर पर इनबॉक्स के लिए मेल का स्थानांतरण करना होगा। मुझे यकीन नहीं है कि जीमेल ट्रस्ट्स ने खुले मेल रिले सर्वरों को खोल दिया है, लेकिन निश्चित रूप से Google पर ओर से प्रमाणीकरण करने के लिए एक आसान काम नहीं है, और फिर जीमेल सर्वर पर मेल रिले करें

यदि आप जीमेल में प्रवेश करने के लिए जावामेल का उपयोग करने के लिए जावामेल अकसर किये गए सवाल पढ़ते हैं, तो आप देखेंगे कि मेजबाननाम और बंदरगाह जीमेल सर्वर की तरफ इशारा करते हैं, और निश्चित तौर पर स्थानीय होस्ट के लिए नहीं। यदि आप अपनी स्थानीय मशीन का उपयोग करना चाहते हैं, तो आपको रिलेइंग या अग्रेषण करना होगा।

SMTP प्रोटोकॉल को गहराई में समझने की आवश्यकता होगी यदि आप एसएमटीपी की बात करते समय कहीं भी प्राप्त करना चाहते हैं। आप SMTP पर विकिपीडिया लेख से शुरू कर सकते हैं, लेकिन किसी भी आगे की प्रगति को वास्तव में एक SMTP सर्वर के विरुद्ध प्रोग्रामिंग की आवश्यकता होगी।

यह काफी समय हो गया है क्योंकि यह पोस्ट किया गया है। लेकिन 13 नवंबर 2012 को मैं यह सत्यापित कर सकता हूं कि पोर्ट 465 अभी भी काम करता है।

इस फोरम पर गैरीएम का जवाब देखें मुझे उम्मीद है कि यह कुछ और लोगों को मदद करता है

 /* * Created on Feb 21, 2005 * */ import java.security.Security; 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.InternetAddress; import javax.mail.internet.MimeMessage; public class GoogleTest { private static final String SMTP_HOST_NAME = "smtp.gmail.com"; private static final String SMTP_PORT = "465"; private static final String emailMsgTxt = "Test Message Contents"; private static final String emailSubjectTxt = "A test from gmail"; private static final String emailFromAddress = ""; private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; private static final String[] sendTo = { ""}; public static void main(String args[]) throws Exception { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); new GoogleTest().sendSSLMessage(sendTo, emailSubjectTxt, emailMsgTxt, emailFromAddress); System.out.println("Sucessfully mail to All Users"); } public void sendSSLMessage(String recipients[], String subject, String message, String from) throws MessagingException { boolean debug = true; Properties props = new Properties(); props.put("mail.smtp.hostTP_HOST_NAME); props.put("mail.smtp.authrue"); props.put("mail.debugrue"); props.put("mail.smtp.portTP_PORT); props.put("mail.smtp.socketFactory.portTP_PORT); props.put("mail.smtp.socketFactory.classL_FACTORY); props.put("mail.smtp.socketFactory.fallbackalse"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("xxxxxx", "xxxxxx"); } }); session.setDebug(debug); Message msg = new MimeMessage(session); InternetAddress addressFrom = new InternetAddress(from); msg.setFrom(addressFrom); InternetAddress[] addressTo = new InternetAddress[recipients.length]; for (int i = 0; i < recipients.length; i++) { addressTo = new InternetAddress(recipients); } msg.setRecipients(Message.RecipientType.TO, addressTo); // Setting the Subject and Content Type msg.setSubject(subject); msg.setContent(message, "text/plain"); Transport.send(msg); } } 

आपको मेल भेजने के लिए एक SMTP सर्वर की आवश्यकता है। ऐसे सर्वर हैं जो आप स्थानीय रूप से अपने पीसी पर स्थापित कर सकते हैं या आप कई ऑनलाइन सर्वरों में से एक का उपयोग कर सकते हैं। अधिक ज्ञात सर्वरों में से एक Google का है:

मैंने सरल जावा मेल से पहले उदाहरण का उपयोग करने की अनुमति वाले Google SMTP कॉन्फ़िगरेशन का सफलतापूर्वक परीक्षण किया:

  final Email email = new Email(); email.setFromAddress("lollypop", "lol.pop@somemail.com"); email.addRecipient("C.Cane", "candycane@candyshop.org", RecipientType.TO); email.setText("We should meet up!"); email.setTextHTML("<b>We should meet up!</b>"); email.setSubject("hey"); new Mailer("smtp.gmail.com", 25, "your user", "your password", TransportStrategy.SMTP_TLS).sendMail(email); new Mailer("smtp.gmail.com", 587, "your user", "your password", TransportStrategy.SMTP_TLS).sendMail(email); new Mailer("smtp.gmail.com", 465, "your user", "your password", TransportStrategy.SMTP_SSL).sendMail(email); 

विभिन्न बंदरगाहों और परिवहन रणनीतियों (जो आपके लिए सभी आवश्यक गुणों को संभालते हैं) को ध्यान दें।

मजे की बात है, Google को पोर्ट 25 पर भी टीएलएस की आवश्यकता है, भले ही गूगल के निर्देश अन्यथा कहें ।

क्या यह कोड ईमेल भेजने के लिए काम करेगा?

ठीक है, नहीं, कुछ हिस्सों को बदलने के बिना, क्योंकि आपको त्रुटि मिल रही है आप वर्तमान में लोकलहोस्ट पर चल रहे एसएमटीपी सर्वर के माध्यम से मेल भेजने का प्रयास कर रहे हैं लेकिन आप ConnectException कोई भी नहीं चल रहे हैं।

कोड मानना ​​ठीक है (मैं वास्तव में जांच नहीं करता), आपको या तो एक स्थानीय एसएमटीपी सर्वर चलाने के लिए, या (दूरस्थ) एक (अपने आईएसपी से) का उपयोग करना होगा।

कोड के बारे में, आप जावामेल डाउनलोड पैकेज में नमूनों को अकसर किये गए प्रश्न के रूप में बता सकते हैं:

JavaMail का उपयोग करने का तरीका दिखाने के लिए मुझे कुछ उदाहरण प्रोग्राम कहां मिल सकते हैं?

प्रश्न: जावा लाइब्रेरी का उपयोग करने के लिए मुझे कुछ उदाहरण प्रोग्राम कहां मिलेंगे?
ए: जावा मैल एपीआई, एक स्विंग-आधारित जीयूआई एप्लीकेशन, एक सरल सर्विसलेट-आधारित एप्लिकेशन, और जेएसपी पेजों का उपयोग करके एक पूरा वेब एप्लीकेशन और विभिन्न वेब अनुप्रयोगों को दिखाते हुए सरल कमांड लाइन कार्यक्रमों सहित JavaMail डाउनलोड पैकेज में कई उदाहरण कार्यक्रम शामिल हैं। एक टैग लाइब्रेरी

निम्नलिखित कोड बहुत अच्छी तरह से काम करता है। इसे जवामेल-1.4.5.jar के साथ जावा एप्लिकेशन के रूप में देखें

 import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class MailSender { final String senderEmailID = "typesendermailid@gmail.com"; final String senderPassword = "typesenderpassword"; final String emailSMTPserver = "smtp.gmail.com"; final String emailServerPort = "465"; String receiverEmailID = null; static String emailSubject = "Test Mail"; static String emailBody = ":)"; public MailSender(String receiverEmailID, String emailSubject, String emailBody) { this.receiverEmailID=receiverEmailID; this.emailSubject=emailSubject; this.emailBody=emailBody; Properties props = new Properties(); props.put("mail.smtp.user",senderEmailID); props.put("mail.smtp.host", emailSMTPserver); props.put("mail.smtp.port", emailServerPort); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.port", emailServerPort); props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); SecurityManager security = System.getSecurityManager(); try { Authenticator auth = new SMTPAuthenticator(); Session session = Session.getInstance(props, auth); MimeMessage msg = new MimeMessage(session); msg.setText(emailBody); msg.setSubject(emailSubject); msg.setFrom(new InternetAddress(senderEmailID)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmailID)); Transport.send(msg); System.out.println("Message send Successfully:)"); } catch (Exception mex) { mex.printStackTrace(); } } public class SMTPAuthenticator extends javax.mail.Authenticator { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(senderEmailID, senderPassword); } } public static void main(String[] args) { MailSender mailSender=new MailSender("typereceivermailid@gmail.com",emailSubject,emailBody); } } 

इसे आज़माएं ये मेरे लिए अच्छी तरह से काम करता है। सुनिश्चित करें कि भेजने से पहले आपको अपने जीमेल अकाउंट में कम सुरक्षित ऐप के लिए पहुंच देने की जरूरत है। तो निम्न लिंक पर जाएं और इस जावा कोड के साथ प्रयास करें।
कम सुरक्षित ऐप के लिए जीमेल सक्रिय करें

आपको javax.mail.jar फ़ाइल और activation.jar फ़ाइल को अपनी प्रोजेक्ट में आयात करना होगा।

जावा में भेजने के लिए यह पूर्ण कोड है I

 import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class SendEmail { final String senderEmail = "your email address"; final String senderPassword = "your password"; final String emailSMTPserver = "smtp.gmail.com"; final String emailServerPort = "587"; String receiverEmail = null; String emailSubject = null; String emailBody = null; public SendEmail(String receiverEmail, String Subject, String message) { this.receiverEmail = receiverEmail; this.emailSubject = Subject; this.emailBody = message; Properties props = new Properties(); props.put("mail.smtp.user", senderEmail); props.put("mail.smtp.host", emailSMTPserver); props.put("mail.smtp.port", emailServerPort); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.port", emailServerPort); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); SecurityManager security = System.getSecurityManager(); try { Authenticator auth = new SMTPAuthenticator(); Session session = Session.getInstance(props, auth); Message msg = new MimeMessage(session); msg.setText(emailBody); msg.setSubject(emailSubject); msg.setFrom(new InternetAddress(senderEmail)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmail)); Transport.send(msg); System.out.println("send successfully"); } catch (Exception ex) { System.err.println("Error occurred while sending.!"); } } private class SMTPAuthenticator extends javax.mail.Authenticator { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(senderEmail, senderPassword); } } public static void main(String[] args) { SendEmail send = new SendEmail("receiver email address", "subject", "message"); } } 

मैंने अपनी समीक्षा के लिए पेस्टबिन पर अपना काम करने वाला जीमेल जावा क्लास रखा है, "start session" साथ में विशेष ध्यान दें विधि और आप समान कार्यक्षमता प्रदान करने के लिए जावामेल को एडजस्ट कर सकते हैं। http://pastebin.com/VE8Mqkqp

एसएमटीपी सर्वर के साथ संबंध स्थापित करने के अलावा, आपका कोड काम करता है आपको अपने लिए ईमेल भेजने के लिए आपको एक चल मेल (एसएमटीपी) सर्वर की आवश्यकता है।

यह आपके संशोधित कोड है मैंने उन हिस्सों की टिप्पणी की है जिनकी आवश्यकता नहीं है और सत्र सृजन को बदल दिया है, इसलिए यह एक प्रमाणक लेता है। अब बस SMPT_HOSTNAME, USERNAME और पासवर्ड का उपयोग करें जिसे आप उपयोग करना चाहते हैं (आपका इंटरनेट प्रदाता आमतौर पर उन्हें प्रदान करता है)।

मैं हमेशा इसे पसंद करता हूं (मुझे पता है कि रिमोट एसएमटीपी सर्वर का उपयोग कर) क्योंकि स्थानीय मैसेरर चलाने से विंडोज के तहत तुच्छ नहीं है (लिनक्स के तहत यह काफी आसान है)।

 import java.util.*; import javax.mail.*; import javax.mail.internet.*; //import javax.activation.*; public class SendEmail { private static String SMPT_HOSTNAME = ""; private static String USERNAME = ""; private static String PASSWORD = ""; public static void main(String[] args) { // Recipient's email ID needs to be mentioned. String to = "abcd@gmail.com"; // Sender's email ID needs to be mentioned String from = "web@gmail.com"; // Assuming you are sending email from localhost // String host = "localhost"; // Get system properties Properties properties = System.getProperties(); // Setup mail server properties.setProperty("mail.smtp.host", SMPT_HOSTNAME); // Get the default Session object. // Session session = Session.getDefaultInstance(properties); // create a session with an Authenticator Session session = Session.getInstance(properties, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(USERNAME, PASSWORD); } }); 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.send(message); System.out.println("Sent message successfully...."); } catch (MessagingException mex) { mex.printStackTrace(); } } } 

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

सादगी के लिए, बस निम्नलिखित विन्यास का उपयोग करें और आप ठीक हो जाएंगे

 // Setup your mail server props.put("mail.smtp.host", SMTP_HOST); props.put("mail.smtp.user",FROM_NAME); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.port", "25"); props.put("mail.debug", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable","true"); props.put("mail.smtp.EnableSSL.enable","true"); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); 

और भी अधिक के लिए: यहां से शुरू से पूरी तरह से काम कर रहे उदाहरण देखें

यहाँ काम समाधान भाई है यह गारंटी है

1) सबसे पहले अपने जीमेल अकाउंट को खोलें, जहां से आप मेल भेजना चाहते थे, जैसे आपके मामले में "xyz@gmail.com"

2) इस लिंक को नीचे https://support.google.com/accounts/answer/6010255?hl=hi खोलें

3) "मेरा खाता में कम सुरक्षित ऐप्स" अनुभाग पर जाएं "पर क्लिक करें।" विकल्प

4) फिर इसे चालू करें

5) यही वह है (:

यहाँ मेरा कोड है

 import javax.mail.*; import javax.mail.internet.*; import java.util.*; public class SendEmail { final String senderEmailID = "Sender Email id"; final String senderPassword = "Sender Pass word"; final String emailSMTPserver = "smtp.gmail.com"; final String emailServerPort = "465"; String receiverEmailID = null; static String emailSubject = "Test Mail"; static String emailBody = ":)"; public SendEmail(String receiverEmailID, String emailSubject, String emailBody) { this.receiverEmailID=receiverEmailID; this.emailSubject=emailSubject; this.emailBody=emailBody; Properties props = new Properties(); props.put("mail.smtp.user",senderEmailID); props.put("mail.smtp.host", emailSMTPserver); props.put("mail.smtp.port", emailServerPort); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.socketFactory.port", emailServerPort); props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); SecurityManager security = System.getSecurityManager(); try { Authenticator auth = new SMTPAuthenticator(); Session session = Session.getInstance(props, auth); MimeMessage msg = new MimeMessage(session); msg.setText(emailBody); msg.setSubject(emailSubject); msg.setFrom(new InternetAddress(senderEmailID)); msg.addRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmailID)); Transport.send(msg); System.out.println("Message send Successfully:)"); } catch (Exception mex) { mex.printStackTrace(); } } public class SMTPAuthenticator extends javax.mail.Authenticator { public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(senderEmailID, senderPassword); } } public static void main(String[] args) { SendEmail mailSender; mailSender = new SendEmail("Receiver Email id","Testing Code 2 example","Testing Code Body yess"); } } 

जैसे ही आपको मिल गया, मुझे एक ही अपवाद मिला। इसका कारण यह नहीं है कि आपकी मशीन में एसएमटीपी सर्वर चल रहा है (क्योंकि आपका मेजबान स्थानीयहोस्ट है)। यदि आप विंडोज 7 का उपयोग करते हैं तो इसमें एसएमटीपी सर्वर नहीं है। इसलिए आपको डोमेन से डाउनलोड, इंस्टॉल और कॉन्फ़िगर करना होगा और खाता बनाना होगा। मैंने एचएमएल सर्वर इस्तेमाल किया है क्योंकि एसएमटीपी सर्वर स्थापित है और मेरी स्थानीय मशीन में कॉन्फ़िगर किया गया है। https://www.hmailserver.com/download

आप यहां Google (जीमेल) खाते का उपयोग कर ईमेल भेजने के लिए एक पूर्ण और बहुत सरल जावा वर्ग पा सकते हैं,

जावा और Google खाते का उपयोग करके ईमेल भेजें

यह निम्न गुणों का उपयोग करता है

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