如何使用Java语言发送Email邮件

一、需要做一些准备工作

  • 需要有一个邮箱账号咯(废话文学~)
  • 进入邮箱找到如图的POP3/SMTP/IMAP选项>>>新增授权密码>>>使用手机扫码完成操作后获得授权码(授权码只显示一次)

  • 准备好了SMTP需要使用的信息后,将JavaMail相关依赖Jar包加入至当前项目
  • 以上准备工作准备完成就可以敲代码了

邮箱账号信息 

//写入邮箱账号信息
String userName = "1566*******@163.com";//自己的邮箱账号
String password = "FHT********IYLTH";//获得的授权码

SMTP服务器连接信息 

//SMTP服务器连接信息
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.163.com");//SMTP主机名
properties.put("mail.smtp.port", "25");//主机端口号
properties.put("mail.smtp.auth", "true");//是否需要用户认证
properties.put("mail.smtp.starttls.enable", "true");//是否启用TLS加密

常用的邮件服务商的SMTP信息:

  • QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587 
  • 163邮箱:SMTP服务器是smtp.163.com,端口是465 
  • Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587
    //创建Session会话
    //参数1:STMP服务器连接参数
    //参数2:账号和和授权码的认证对象
    Session session = Session.getInstance(properties,new Authenticator() {
        @Override
    	protected PasswordAuthentication getPasswordAuthentication() {
    		//也可以将账号授权码参数写在这里
    		return new PasswordAuthentication(userName, password);
    	}
    });

    二、在正式发送邮件时还得构造一个Message对象,然后调用方法完成发送

    //message对象
    MimeMessage message = new MimeMessage(session);
    //发送信息
    //设置发送方地址
    message.setFrom(new InternetAddress("156*******1@163.com"));
    //设置接受方地址
    message.setRecipient(RecipientType.TO, new InternetAddress("6*****678@qq.com"));
    //此处为抄送类似于发送多人
    message.setRecipients(RecipientType.CC, new InternetAddress[]{new InternetAddress("2*****7670@qq.com")});
    //发送内容
    message.setSubject("测试邮件");//邮件标题
    //<b></b>标签为加粗中间内容
    //类似的HTML字符串标签都可以显示效果
    message.setText("<b>麻袋蛋</b>吃人","utf-8","html");//邮件正文
    Transport.send(message);//发送邮件
    
    			

    三、除此之外,使用Java语言发送邮件也可以携带附件

  • 不能再是由message.getText方法,而是要构造一个Multipart对象
    //创建Multipart对象
    Multipart multipart = new MimeMultipart();
    //添加正文部分
    BodyPart textPart = new MimeBodyPart();
    textPart.setContent("啦啦<b>啦</b>啦啦啦","text/html;charset=utf-8");
    multipart.addBodyPart(textPart);
    //添加附件部分
    BodyPart filePart = new MimeBodyPart();
    filePart.setFileName("略略略略");//附件文件显示名字
    //上传附件
    filePart.setDataHandler(new DataHandler(
    new ByteArrayDataSource(
    Files.readAllBytes(Paths.get("D:\\3yue\\qq.png")),//本地文件地址
    "application/octet-stream")));//二进制文件MIME类型
    multipart.addBodyPart(filePart);
    //将Multipart对象放入邮件
    message.setContent(multipart);
    //发送邮件
    Transport.send(message);
  •  二进制文件MIME类型 application/octet-stream
  • Word文档则是application/msword

 四、发送一个内嵌图片的HTML邮件

  • 内嵌的图片可以直接在邮件中显示不必下载也不会有格式不对的问题
  • 内嵌图片也是以一个附件的形式嵌入邮件只需要在上面代码的基础上添加内嵌图片部分
  • 对文字部分做一些改动
    //创建Multipart对象
    Multipart multipart = new MimeMultipart();
    //添加正文部分
    BodyPart textPart = new MimeBodyPart();
    //使用StringBuilder拼接以下内容
    StringBuilder contentText = new StringBuilder();
    contentText.append("<h3>验证码</h3>");//标题
    contentText.append("<p>123</p>");//正文
    //与下文ID对应才可以正常显示内嵌图片
    contentText.append("<img src=\"cid:YZM\"/>");
    textPart.setContent(contentText.toString(),"text/html;charset=utf-8");//格式
    multipart.addBodyPart(textPart);
    //添加内嵌图片部分
    BodyPart imagePart = new MimeBodyPart();
    imagePart.setDataHandler(new DataHandler(
    new ByteArrayDataSource(
    Files.readAllBytes(Paths.get("D:\\3yue\\jdbc.jpg")),//添加本地图片的地址
    "application/octet-stream")));
    imagePart.setHeader("content-ID","YZM");//此处ID与上文对应
    multipart.addBodyPart(imagePart);
    //将Multipart对象放入邮件
    message.setContent(multipart);
    //发送邮件
    Transport.send(message);

    五、知识补充

  • 邮箱的服务地址有主要有三种:POP3、SMTP、IMAP 本文以SMTP作为例子。
  • MUA:Mail User Agent---给用户服务的邮件代理
  • MTA:Mail Transfer Agent---邮件中转的代理
  • MDA:Mail Delivery Agent---邮件到达的代理
  • MUA到MTA发送邮件的协议就是SMTP协议,它建立在TCP之上的协议
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要实现邮件发送功能,首先需要连接到一个邮件服务器。以下是用Java语言实现邮件发送功能的步骤: 1. 导入JavaMail和Java Activation Framework库。可以从Oracle官方网站下载这两个库的jar包。 2. 创建一个JavaMail Session对象,该对象将包含发送邮件所需的信息,如SMTP服务器地址、端口号、用户名和密码等。 ``` Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_email_address", "your_email_password"); } }); ``` 3. 创建一个MimeMessage对象,该对象将包含要发送邮件的内容,如收件人、主题、内容等。 ``` Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your_email_address")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient_email_address")); message.setSubject("email_subject"); message.setText("email_body"); ``` 4. 发送邮件。 ``` Transport.send(message); ``` 完整的代码示例: ``` import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; public class SendEmail { public static void main(String[] args) throws Exception { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_email_address", "your_email_password"); } }); Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your_email_address")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient_email_address")); message.setSubject("email_subject"); message.setText("email_body"); Transport.send(message); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院懒羊羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值