接下来进入编程开发模式
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("artcool@126.com"));
Transport transport = session.getTransport();
//连接服务器所要用到的参数:主机名、端口号、用户名、密码
transport.connect("smtp@sina.com", 25, "15913376126", "123456");
transport.send(msg,new Address[]{new InternetAddress("artcool@126.com")});
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("artcool@126.com"));
Transport transport = session.getTransport();
//连接服务器所要用到的参数:主机名、端口号、用户名、密码
transport.connect("smtp@sina.com", 25, "15913376126", "123456");
transport.send(msg,new Address[]{new InternetAddress("artcool@126.com")});
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 "smtp@sina.com", port 25, isSSL false
javax.mail.MessagingException: Unknown SMTP host: smtp@sina.com;
nested exception is:
java.net.UnknownHostException: smtp@sina.com
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: smtp@sina.com
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("smtp@sina.com", 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("artcool@126.com"));
Transport transport = session.getTransport();
//连接服务器所要用到的参数:主机名、端口号、用户名、密码
transport.connect("smtp.sina.com", 25, "15913376126", "123456");
transport.sendMessage(msg, new Address[]{new InternetAddress("artcool@126.com")});
// transport.send(msg,new Address[]{new InternetAddress("artcool@126.com")});
transport.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
现在是没问题的了,由于在网上公开,我就不给真实的邮箱账号密码了。