简单的邮件开发3---Java - Go语言中文社区

简单的邮件开发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("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();
			}
	}

}


现在是没问题的了,由于在网上公开,我就不给真实的邮箱账号密码了。


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u011465875/article/details/51776014
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 13:42:48
  • 阅读 ( 541 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢