簡單的郵件開發3---Java

接下來進入編程開發模式

package com.sinwao.javamail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
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 Demo1 {

	/**
	 * @author artcool
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			//配置環境
			Properties pros = new Properties();
//			pros.setProperty("mail.debug", "");//調試模式
			pros.setProperty("mail.smtp.auth", "true");
			Session session = Session.getDefaultInstance(pros);
			session.setDebug(true);
			
			//郵件內容
			Message msg = new MimeMessage(session);
			msg.setText("hello");
			msg.setFrom(new InternetAddress("[email protected]"));
			
			Transport transport = session.getTransport();
			//連接服務器所要用到的參數:主機名、端口號、用戶名、密碼
			transport.connect("[email protected]", 25, "15913376126", "123456");
			transport.send(msg,new Address[]{new InternetAddress("[email protected]")});
			transport.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

}


但是這裏報了一個錯誤:

DEBUG: setDebug: JavaMail version 1.4ea
javax.mail.NoSuchProviderException: Invalid protocol: null
	at javax.mail.Session.getProvider(Session.java:431)
	at javax.mail.Session.getTransport(Session.java:650)
	at javax.mail.Session.getTransport(Session.java:631)
	at javax.mail.Session.getTransport(Session.java:617)
	at com.sinwao.javamail.Demo1.main(Demo1.java:35)

協議無效,原來是忘記添加協議了

package com.sinwao.javamail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
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 Demo1 {

	/**
	 * @author artcool
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			//配置環境
			Properties pros = new Properties();
//			pros.setProperty("mail.debug", "");//調試模式
			pros.setProperty("mail.smtp.auth", "true");
			pros.setProperty("mail.transport.protocol", "smtp");
			Session session = Session.getDefaultInstance(pros);
			session.setDebug(true);
			
			//郵件內容
			Message msg = new MimeMessage(session);
			msg.setText("hello");
			msg.setFrom(new InternetAddress("[email protected]"));
			
			Transport transport = session.getTransport();
			//連接服務器所要用到的參數:主機名、端口號、用戶名、密碼
			transport.connect("[email protected]", 25, "15913376126", "123456");
			transport.send(msg,new Address[]{new InternetAddress("[email protected]")});
			transport.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

}


接下來看看會出現什麼結果?

DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "[email protected]", port 25, isSSL false
javax.mail.MessagingException: Unknown SMTP host: [email protected];
  nested exception is:
	java.net.UnknownHostException: [email protected]
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1280)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
	at javax.mail.Service.connect(Service.java:275)
	at com.sinwao.javamail.Demo1.main(Demo1.java:38)
Caused by: java.net.UnknownHostException: [email protected]
	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195)
	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:232)
	at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1250)
	... 3 more

報了一個無法識別主機的異常。很明顯問題出現在了主機名那裏,檢查一下發現

transport.connect("[email protected]", 25, "15913376126", "123456");

確實寫錯了,應該是smtp.sina.com


接下來看控制檯結果輸出:

DEBUG: setDebug: JavaMail version 1.4ea
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.sina.com", port 25, isSSL false
220 smtp-2-31.smtpsmail.fmail.yf.sinanode.com ESMTP
DEBUG SMTP: connected to host "smtp.sina.com", port: 25

EHLO home-pc
250-smtp-2-31.smtpsmail.fmail.yf.sinanode.com
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
MTU5MTMzNzYxMjY=
334 UGFzc3dvcmQ6
MTIzNDU2
535 5.7.8 authentication failed

說明可以連接服務器了,但是報了一個認證失敗的問題。這會就要看看自己的用戶名密碼是否正確了。


繼續來看

package com.sinwao.javamail;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
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 Demo1 {

	/**
	 * @author artcool
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			//配置環境
			Properties pros = new Properties();
//			pros.setProperty("mail.debug", "");//調試模式
			pros.setProperty("mail.smtp.auth", "true");
			pros.setProperty("mail.transport.protocol", "smtp");
			Session session = Session.getDefaultInstance(pros);
			session.setDebug(true);
			
			//郵件內容
			Message msg = new MimeMessage(session);
			msg.setText("hello");
			msg.setFrom(new InternetAddress("[email protected]"));
			
			Transport transport = session.getTransport();
			//連接服務器所要用到的參數:主機名、端口號、用戶名、密碼
			transport.connect("smtp.sina.com", 25, "15913376126", "123456");
			transport.sendMessage(msg, new Address[]{new InternetAddress("[email protected]")});
//			transport.send(msg,new Address[]{new InternetAddress("[email protected]")});
			transport.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

}


現在是沒問題的了,由於在網上公開,我就不給真實的郵箱賬號密碼了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章