Java循环邮箱发送(基础框架)

第一部分

用于通过 SMTP 协议发送邮件。以下是代码的主要部分:

1. 导入相关的 Jakarta Mail 类和接口,这些类用于处理邮件传输和消息构建。
2. `Email` 类包含一个名为 `qqemai` 的方法,用于发送邮件。
3. 在 `qqemai` 方法中,首先设置了邮件传输所需的属性,包括主机名、端口号、认证信息等。
4. 使用 `Session.getInstance(properties)` 方法创建一个邮件会话对象 `Session`。
5. 使用 `MimeMessage` 类创建一个 MIME 邮件消息对象 `message`。
6. 设置发件人、收件人、邮件标题和内容。
7. 通过 `session.getTransport()` 方法获取邮件传输对象 `Transport`。
8. 使用 `transport.connect(email+"@qq.com", sqm)` 方法连接到发件人的邮箱账户。
9. 使用 `transport.sendMessage(message, message.getAllRecipients())` 方法发送邮件。
10. 最后关闭邮件传输。

这个代码是一个简单的邮件发送器,主要用于通过 QQ 邮箱发送邮件。它使用 Jakarta Mail API 来构建和发送邮件。在发送邮件之前,用户需要提供目标邮箱地址、邮件标题、邮件内容、发件人的 QQ 邮箱地址以及 QQ 邮箱的授权码。邮件发送的过程中会输出调试信息以及成功提示。

该代码仅支持简单的文本邮件发送,如果需要发送带有附件或者 HTML 格式的邮件,还需要进行相应的扩展和修改。此外,代码中的密码和邮箱地址都是明文存储在代码中的,不够安全,建议将其配置到外部的配置文件中,并通过读取配置文件的方式来获取。

import jakarta.mail.Message;
import jakarta.mail.MessagingException;
import jakarta.mail.Session;
import jakarta.mail.Transport;
import jakarta.mail.internet.AddressException;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;

import java.util.Properties;

/**
 * @author joker_dj
 * @create 2020-04-13日 18:43
 */
public class Email {

    public void qqemai(String QQmail,String head,String body,String email,String sqm) throws AddressException, MessagingException {
        Properties properties = new Properties();
        properties.put("mail.transport.protocol", "smtp");// 连接协议
        properties.put("mail.smtp.host", "smtp.qq.com");// 主机名
        properties.put("mail.smtp.port", 465);// 端口号
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用
        properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息
        // 得到回话对象
        Session session = Session.getInstance(properties);
        // 获取邮件对象
        Message message = new MimeMessage(session);
        // 设置发件人邮箱地址
        message.setFrom(new InternetAddress("123456789@qq.com"));
        // 设置收件人邮箱地址
        message.setRecipients(Message.RecipientType.TO,
                new InternetAddress[] { new InternetAddress(QQmail) });
        //new InternetAddress();设置同时发送多个好友
        // 设置邮件标题
        message.setSubject(head);
        // 设置邮件内容
        message.setText(body);
        // 得到邮差对象
        Transport transport = session.getTransport();
        // 连接自己的邮箱账户
        transport.connect(email+"@qq.com", sqm);// 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
        // 发送邮件
        int i=0;
        transport.sendMessage(message, message.getAllRecipients());
        System.out.println("成功!");
        transport.close();
    }
}

第二部分

`Main` 类是用于通过控制台交互的方式发送定时邮件。以下是代码的主要部分:

1. 导入了 `MessagingException` 异常类以及 `Scanner` 类。
2. 创建了 `Main` 类,其中的 `main` 方法是程序的入口点。
3. 在 `main` 方法中,首先使用 `Scanner` 对象获取用户输入的 QQ 邮箱地址和授权码。
4. 创建了一个 `Email` 类的实例对象 `qq`,用于发送邮件。
5. 再次使用 `Scanner` 对象获取用户输入的收件人邮箱地址、邮件标题和邮件内容。
6. 创建了一个 `Timer` 对象 `timer`,用于定时执行任务。
7. 创建了一个 `TimerTask` 对象 `timerTask`,重写了其 `run` 方法,在该方法中调用 `qqemai` 方法发送邮件。
8. 使用 `timer.schedule(timerTask,0,5000)` 方法安排定时任务,第一个参数表示首次执行任务的延迟时间(此处为立即执行),第二个参数表示任务的执行周期(此处为每5秒执行一次)。

代码的介绍如下:

这个程序允许用户在控制台输入自己的 QQ 邮箱地址、授权码以及要发送的邮件信息(收件人邮箱地址、邮件标题、邮件内容)。然后,程序将以每5秒的频率发送一封包含指定信息的邮件到指定的收件人邮箱地址。这个程序通过使用 Java 的定时任务功能实现了邮件的定时发送。

需要注意的是,定时任务的执行是在一个单独的线程中进行的,因此如果有需要在主线程中与定时任务交互的情况,可能需要考虑线程同步等问题。此外,定时任务的周期性执行可以根据实际需求进行调整。

import jakarta.mail.MessagingException;
import java.util.Scanner;
import java.util.TimerTask;
import java.util.Timer;

public class Main {
    public static void main(String[] args) throws MessagingException {
        Scanner on = new Scanner(System.in);
        System.out.print("请先绑定你的qq账号:");
        String email = on.next();
        System.out.print("\n绑定你的授权码:");
        String sqm = on.next();
        Email qq = new Email();
        Scanner input = new Scanner(System.in);
        System.out.println("请输入收件人邮箱号");
        String QQmail = input.next();
        System.out.println("请输入要发送的标题");
        String head = input.next();
        System.out.println("请输入要发送的文本");
        String body = input.next();
        Timer timer = new Timer();
         TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                try {
                    qq.qqemai(QQmail, head, body, email, sqm);
                } catch (MessagingException e) {
                    throw new RuntimeException(e);
                }
            }
         };timer.schedule(timerTask,0,5000);



    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
利用Java发送邮件(含附件)的例子 1、邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面) emailsmtp=smtp.qq.comemailaddress=459104018@qq.comemailpass=******2、读取配置文件的类文件(ReadPropertity.java) import java.io.IOException;import java.util.Properties;public class ReadPropertity { static Properties props = new Properties(); static { try { props.load(ReadPropertity.class.getClassLoader().getResourceAsStream( "utils.properties")); } catch (IOException e1) { e1.printStackTrace(); } } public static String getProperty(String key) { return props.getProperty(key); }}3、邮件处理类(EmailHandle.java)import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.BodyPart;import javax.mail.Message;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.MimeMultipart;import javax.mail.internet.MimeUtility;/*** 本程序用java来实现Email的发送, 所用到的协议为:smtp* <p>Company: 疯狂的IT人</p>* time:2013-04-05* @author www.crazyiter.com* @date * @version 1.0 */public class EmailHandle { private MimeMessage mimeMsg; //邮件对象 private Session session; //发送邮件的Session会话 private Properties props;//邮件发送时的一些配置信息的一个属性对象 private String sendUserName; //发件人的用户名 private String sendUserPass; //发件人密码 private Multipart mp;//附件添加的组件 private List files = new LinkedList();//存放附件文件 public EmailHandle(String smtp) { sendUserName = ""; sendUserPass = ""; setSmtpHost(smtp);// 设置邮件服务器 createMimeMessage(); // 创建邮件 } public void setSmtpHost(String hostName) { if (props == null) props = System.getProperties(); props.put("mail.smtp.host", hostName); } public boolean createMimeMessage(){ try { // 用props对象来创建并初始化session对象 session = Session.getDefaultInstance(props, null); } catch (Exception e) { System.err.println("获取邮件会话对象时发生错误!" + e); return false; } try { mimeMsg = new MimeMessage(session); // 用session对象来创建并初始化邮件对象 mp = new MimeMultipart();// 生成附件组件的实例 } catch (Exception e) { return false; } return true; } /** * 设置SMTP的身份认证 */ public void setNeedAuth(boolean need) { if (props == null) props = System.getProperties(); if (need) props.put("mail.smtp.auth", "true"); else props.put("mail.smtp.auth", "false"); } /** * 进行用户身份验证时,设置用户名和密码 */ public void setNamePass(String name, String pass) { sendUserName = name; sendUserPass = pass; } /** * 设置邮件主题 * @param mailSubject * @return */ public boolean setSubject(String mailSubject) { try { mimeMsg.setSubject(mailSubject); } catch (Exception e) { return false; } return true; } /** * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8 * @param mailBody * @return */ public boolean setBody(String mailBody) { try { BodyPart bp = new MimeBodyPart(); bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>"+ mailBody, "text/html;charset=UTF-8"); // 在组件上添加邮件文本 mp.addBodyPart(bp); } catch (Exception e) { System.err.println("设置邮件正文时发生错误!" + e); return false; } return true; } /** * 增加发送附件 * @param filename * 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常 * @return */ public boolean addFileAffix(String filename) { try { BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(MimeUtility.encodeText(fileds.getName(),"utf-8",null)); // 解决附件名称乱码 mp.addBodyPart(bp);// 添加附件 files.add(fileds); } catch (Exception e) { System.err.println("增加邮件附件:" + filename + "发生错误!" + e); return false; } return true; } public boolean delFileAffix(){ try { FileDataSource fileds = null; for(Iterator it = files.iterator() ;it.hasNext();) { fileds = (FileDataSource)it.next(); if(fileds != null && fileds.getFile() != null){ fileds.getFile().delete(); } } }catch (Exception e) { return false; } return true; } /** * 设置发件人地址 * @param from * 发件人地址 * @return */ public boolean setFrom(String from) { try { mimeMsg.setFrom(new InternetAddress(from)); } catch (Exception e) { return false; } return true; } /** * 设置收件人地址 * @param to收件人的地址 * @return */ public boolean setTo(String to) { if (to == null) return false; try { mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); } catch (Exception e) { return false; } return true; } /** * 发送附件 * @param copyto * @return */ public boolean setCopyTo(String copyto) { if (copyto == null) return false; try { mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(copyto)); } catch (Exception e) { return false; } return true; } /** * 发送邮件 * @return */ public boolean sendEmail() throws Exception{ mimeMsg.setContent(mp); mimeMsg.saveChanges(); System.out.println("正在发送邮件...."); Session mailSession = Session.getInstance(props, null); Transport transport = mailSession.getTransport("smtp"); // 连接邮件服务器并进行身份验证 transport.connect((String) props.get("mail.smtp.host"), sendUserName,sendUserPass); // 发送邮件 transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); System.out.println("发送邮件成功!"); transport.close(); return true; }}4、邮件发送的类文件(SendEmail.java)/*** 发送邮件测试* <p>Company: 疯狂的IT人</p>* time:2013-04-05* @author www.crazyiter.com* @date * @version 1.0 */public class SendEmail { public SendEmail() { } /***以后需要两个参数:接收方地址 、 内容***/ public static void send(String subject, String toaddress,String content)throws Exception { String hostName = ReadPropertity.getProperty("emailsmtp"); String fromAddress = ReadPropertity.getProperty("emailaddress"); String fromAPass = ReadPropertity.getProperty("emailpass"); EmailHandle emailHandle = new EmailHandle(hostName); emailHandle.setFrom(fromAddress); emailHandle.setNeedAuth(true); emailHandle.setSubject(subject); emailHandle.setBody(content); emailHandle.setTo(toaddress); emailHandle.setFrom(fromAddress); emailHandle.addFileAffix("D:/myself/help/txt/java环境变量.txt");// 附件文件路径 emailHandle.setNamePass(fromAddress, fromAPass); emailHandle.sendEmail(); } public static void main(String[] args) { try { SendEmail.send("带附件的邮件测试","459104018@qq.com","测试内容<a href='http://www.crazyiter.com'>疯狂的IT人</a>"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}5、发送邮件需要的jar包:activation.jarmail-plugin.jarmail.jar6、打包下载: 疯狂的IT人整理java邮件发送(源码).rar 下载地址: http://www.crazyiter.com/bbs/forum.php?mod=attachment&aid=MjF8MzQzOTYzZjB8MTM2NTE3NjczMHwxfDExNDA%3D
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值