资讯详情

JAVA怎么来发送邮件的(JAVA Email)

大家一定都很熟悉邮件,也知道具体的流程。其实和现在的快递差不多。比如你要把一件东西邮寄给上海的一个朋友。你来自西安。你先把包裹信息填好给西安的邮递公司,然后西安的邮递公司转手送到上海。是时候等你的朋友过来拿了吧?是一个过程,一个过程。JAVA发邮件也一样,接下来,让我们用一张图片来简要解释一下。

;全称Mail User Agent意思是为用户提供邮件代理。

;全称 Mail Transfer Agent 意思是提供邮件中转服务。

:全称 Mail Delivery Agent 一旦电子邮件到达代理,意思邮件到达代理处MDA不动,等收件人过来取。

快递有快递的规则,比如快递不能有易燃易爆的东西,危险的东西,JavaEmail还有,其他电子邮件也有相应的规定。接下来我们来介绍一下电子邮件协议见的协议包括POP3,SMTP,IMAP.

:是PostOfficeProtocol简称3,即邮局协议的第三个版本,规定如何连接个人电脑internet电子邮件服务器与下载电子邮件的电子协议。在服务器上,而POP3服务器遵循POP接收电子邮件邮件的协议接收邮件服务器。

:的全称是“SimpleMailTransferProtocol即简单的邮件传输协议。它是一组从源地址到目的地址传输邮件的规范,通过它来控制邮件的传输。SMTP协议属于TCP/IP协议簇帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器遵循SMTP发送协议邮件服务器。

IMAP全称是InternetMailAccessProtocol,即交互式电子邮件访问协议,它与POP类似的邮件访问标准协议之一。不同之处在于,它已经打开了IMAP后,如:删除电子邮件、标记已读等,服务器上的电子邮件也会做出相应的动作。因此,无论您是从浏览器登录电子邮件还是客户端软件登录电子邮件,您邮件和状态都是一致的.

;我们必须在发邮件之前做好准备SMTP登录信息就是写一个MUA发送邮件的软件MTA在此过程中,发送电子邮件的协议是SMTP,我们在发送时的决定MTA地址和端口号。邮件地址一般是smtp.example.com 至于有邮件服务提供商提供的端口号,我们以126邮箱为例,他的地址smtp.126.com,对应的端口号为25,其他邮件软件的地址和端口如下

:首先,我们必须连接到126的服务器,以一端口25为例创建properties对象的目的是填写相关信息,就像你发送快递、收件人等信息一样,然后获取Session例子,然后在具体的解释代码中注释。连接服务器并创建Session对象写在JavaSessionmail类的creat方法是为了方便,不需要重复写作。

package emile.com;  import java.util.Properties;  import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; import javax.mail.Session;  public class JavaSessionmail {  public static Session creat() {   /**    * 创建Session(会话 )    */   // SMTP服务器地址   String smtp = "smtp.126.com";   // 邮箱账号和密码   String userName = "ouwengogo@126.com";   String password = "DUJSCJKTATITPXNUBP";   // SMTP连接服务器的信息   Properties pros = new Properties();   pros.put("mail.smtp.host", smtp);// SMPT主机名   pros.put("mail.smtp.port", "25");// 主机端口号   pros.put("mail.smtp.auth", "true");// 是否需要认证   pros.put("mail.smtp.starttls.enable", "true");// 启动TLS加密    Session session = Session.getInstance(pros, new Authenticator() {     @Override    protected PasswordAuthentication getPasswordAuthentication() {     return new PasswordAuthentication(userName, password);    }    });   //启动Debug模式遍历调试   session.setDebug(true);      return session;  } } 

:就是发邮件,但是我们发的时候构建了一个。Message然后调用对象Transport.send(msg)方法可以发送,代码中使用的具体方法也有相对的注释

package emile.com;  import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType;  public class Sentmail01 {  public static void main(String[] args) {    try {    // 创建Session回话    Session session = JavaSessionmail.creat();    // 创建邮箱对象(Message抽象子类)    MimeMessage msg = new MimeMessage(session);    msg.setFrom(new InternetAddress("ouwengogo@126.com"));// 发送者来自哪里?    msg.setRecipient(RecipientType.TO, new InternetAddress("251909651250@qq.com"));///收件是谁?    msg.setSubject("你被警察通缉了", "utf-8");// 邮件的标题    msg.setText("我是你爸爸。", "utf-8");///文本内容    // 发送邮件    Transport.send(msg);   } catch (MessagingException e) {     e.printStackTrace();   }  } } 

接下来,我们可以看到以下代码代表您成功发送电子邮件,因为您正在创建Session对象是后调用debug调试模式

DEBUG: setDebug: JavaMail version 1.4.7 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.126.com", port 25, isSSL false 220 126.com Anti-spam GT for Coremail System (126com[20140526]) DEBUG SMTP: connected to host "smtp.126.com", port: 25  EHLO DESKTOP-V13H850 250-mail 250-PIPELINING 250-AUTH LOGIN PLAIN XOAUTH2 250-AUTH=LOGIN PLAIN XOAUTH2 250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrAVC3lUCa0xDrUUUUj 250-STARTTLS 250-ID 250 8BITMIME DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2" DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN XOAUTH2" DEBUG SMTP: Found extension "coremail", arg "1Uxr2xK7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrAVC3lUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ID", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
STARTTLS
220 Ready to start TLS
EHLO DESKTOP-V13H850
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN XOAUTH2
250-AUTH=LOGIN PLAIN XOAUTH2
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF8RndZUCa0xDrUUUUj
250-STARTTLS
250-ID
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH2"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN XOAUTH2"
DEBUG SMTP: Found extension "coremail", arg "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UF8RndZUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ID", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM 
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN succeeded
DEBUG SMTP: use8bit false
MAIL FROM:<billgogoogooo@126.com>
250 Mail OK
RCPT TO:<55094839@qq.com>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   55094839@qq.com
DATA
354 End data with <CR><LF>.<CR><LF>
From: billgogoogooo@126.com
To: 55094839@qq.com
Message-ID: <186370029.0.1655292470948.JavaMail.apple@DESKTOP-V13H850>
Subject: Hello
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Hi Xiaoming...
.
250 Mail OK queued as smtp2,DMmowAC3Hv9HwqlibNsyDQ--.51230S3 1655292488
QUIT
221 Bye

再比如说在这个的基础上需要做一些格式,让某个字或者某些字变粗,可以实现如下代码

msg.setText("立马束手就擒,我是你<b>爹</b>", "utf-8","html");//还有其他格式(爹变粗)

再比如说你在发送正文的同时还想发送一些附件如照片啊什么的实现的代码就需要构造一个Multpart对象,一个Multpart对象可以添加若干个bodypart,一个可以代表是文本一个可以代表是附件BodyPart 依靠 setContent()决定添加的内容。用setcontent("...","text/plain;chars et=utf-8”)添加纯文本,

setcontent("...","text/html;charset=utf-8'?添加HTML文本。

如果添加附件,需要设置文件名(不一定和真实文件名一致),并且添加一个 DataHandler(),传入文件的MIME类型。二进制文件可以用 application/octet-stream,Word文档则是application/msword。 最后,通过 setContent()把 Multipart 添加到 Message 中,即可发送。(代码里有相应方法的注解)

package emile.com;

import java.io.IOException;

import java.nio.file.Files;
import java.nio.file.Paths;

import javax.activation.DataHandler;

import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;

public class Sentmail03 {
	public static void main(String[] args) {
		try {
			// 创建Session回话
			Session session = JavaSessionmail.creat();
			// 创建邮箱对象(Message抽象类的子类)
			MimeMessage msg = new MimeMessage(session);
			msg.setFrom(new InternetAddress("ouwengogo@126.com"));// 是谁发的
			msg.setRecipient(RecipientType.TO, new InternetAddress("25***99620@qq.com"));
			msg.setSubject("你被张警官通缉了", "utf-8");// 邮件的标题

			// 邮件内容“复合”对象			
			Multipart multipart=new MimeMultipart();		
			//正文
			BodyPart textpart=new MimeBodyPart();
			//参数一正文内容
			//参数二是内容类型,字符内容	
			textpart.setContent("我在练习java编程,不要试图猜测我是谁,要猜就是你<b>爹</b>", "text/html;charset=utf-8");
			
			//附件
			BodyPart imgepart=new MimeBodyPart();
			imgepart.setFileName("zhy.jpg");//设置附件文件的显示名称	
			imgepart.setDataHandler(new DataHandler
					(new ByteArrayDataSource//字节数组源
							(Files.readAllBytes//将拿到的图片变成字节数组
									(Paths.get("C:\\pic\\pic1\\zhy.JPEG")),//图片的路径
									"application/octet")));//ttp的一种协议	
			//添加至邮箱内容
			multipart.addBodyPart(textpart);//添加正文
			multipart.addBodyPart(imgepart);//从    添加附件		
			msg.setContent(multipart);			
			Transport.send(msg);
		} catch (MessagingException e) {

			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

标签: uxr抗硫化厚膜芯片电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台