【干货】建议收藏!!30行代码教你如何使用Java向全班同学发送邮件

在这里插入图片描述

1. 写在前面

  • 现在请你想象一下下面这两个场景:

场景1:
你是一个大学部门的部员,你的部长给你一个任务:向所有通过面试的成员发送一个邮件,除了姓名和联系方式,内容都是一致的。
场景2:
你是一家企业的员工,你的老板让你给你们单位的所有员工发送一个邮件,内容是有关工资的情况,邮件上除了姓名和工资外,其余内容都是一致的。

不得不说,类似上面的场景非常常见!这个时候如果我们使用手动方式去发送,这也太Oh,You Tired(OUT)了吧!!是否可以用代码帮我们发送?答案是肯定的,现在就让JK来教大家如何使用Java向多群体发送多邮件!
在这里插入图片描述

2. 前期准备

2.1. 开通POP3/SMTP服务

因为我本人是习惯使用网易邮箱的,那么这里就以网易邮箱为例,其他邮箱大同小异。
首先,打开网页版的网易邮箱并登陆自己的邮箱。在这里插入图片描述
打开设置->POP3/SMTP/IMAP
在这里插入图片描述
开通POP3/SMTP服务,这里开启的时候会有一个小小的手机短信验证,相信这个对你来说就很简单的啦~
【重要!!!】确认开启并验证成功后该页面会生成一个授权码,该授权码要自己先保存着,后面要写到代码里面。
在这里插入图片描述

2.2. 项目构建

新建一个Maven项目,项目很简单,只有一个发送邮件的Java类和一个pom.xml文件。我们主要是通过这个SendEmail类的sendMail方法执行发送邮件的操作,该方法传入邮箱地址、邮箱内容等参数。
在这里插入图片描述
在pom.xml中添加依赖。

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

2.3. 重点代码讲解

2.3.1. 开启配置

创建一个Properties对象设置邮箱服务器配置信息。

Properties props = new Properties();

2.3.2. Session对象

创建一个Session对象。

Session session = Session.getDefaultInstance(props);

2.3.3. MimeMessage对象

创建MimeMessage对象存储发送邮件过程中的信息。

MimeMessage message = new MimeMessage(session);

3. 完整代码

你并没有看错,除了导包语句和注释,这个程序只有30行代码左右。这里的代码是针对一个邮箱发送一份邮件,但我想聪明的你应该知道如何去发挥吧~~

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;

/**
 * @ClassName SendEmail
 * @Description TODO
 * @Author jiaqi
 * @Date 2021/6/4 0:22
 * @Version 1.0
 **/
public class SendEmail {
    public static void main(String[] args) {
        // 自定义发件人的邮箱(此案例必须为网易邮箱)
        String from = "发件人邮箱地址";
        // 发件人称号,与发件人邮箱相同
        String user = "发件人邮箱地址";
        // 发件人邮箱客户端的授权码
        String password = "授权码";
        // 自定义收件人的邮箱
        String to = "收件人邮箱地址";
        // 发送邮箱标题
        String title = "我是标题哦!";
        // 发送邮箱文本
        String text = "你好,这里是邮件的内容";
        boolean bool = sendMail(from,user,password,to,title,text);
        System.out.println(bool);
    }
    /*
     * @Author Jiaqi
     * @Description //TODO 
     * @Date 0:46 2021/6/4
     * @Param [from, user, password, to, text, title]
     * @return boolean
     **/
    public static boolean sendMail(String from ,String user,String password, String to, String title,String text) {
        //开启配置
        Properties props = new Properties();
        // 设置服务器属性,这里是使用网易的smtp服务器
        props.setProperty("mail.smtp.host", "smtp.163.com");
        // 校验用户名和密码
        props.put("mail.smtp.host", "smtp.163.com");
        props.put("mail.smtp.auth", "true");
        // 使用刚刚定义个配置对象创建一个session对象
        Session session = Session.getDefaultInstance(props);
        // 在控制台显示显示发送过程信息
        session.setDebug(true);
        // 创建message对象存储信息
        MimeMessage message = new MimeMessage(session);
        try {
            //存储发件人邮箱
            message.setFrom(new InternetAddress(from));
            // 存储收件人邮箱
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            // 存储标题
            message.setSubject(title);
            // 内容(包括文本和附件)
            Multipart multipart = new MimeMultipart();
            // 文本
            BodyPart contentPart = new MimeBodyPart(); 
            //设置文本内容和编码
            contentPart.setContent(text, "text/html;charset=utf-8");
            //像内容中添加文本信息
            multipart.addBodyPart(contentPart);
            //存储文本
            message.setContent(multipart);
            // 保存
            message.saveChanges();
            // 连接服务器的邮箱
            Transport transport = session.getTransport("smtp");
            transport.connect("smtp.163.com", user, password);
            // 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭资源
            transport.close();
        } catch (MessagingException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}

提供改进思路:

  1. 你可以设置多份邮件内容,然后向一个邮箱发送多份不同邮件。
  2. 你可以设置多个不同邮箱,然后向不同邮箱发送同一份邮件内容。
  3. 你可以设置多个不同邮箱,然后设置一份邮件内容,但设置每个邮箱匹配不同的姓名、电话等信息,有数据库基础的小伙伴还可以结合数据库的信息实现。
  4. 你可以设置多个不同的内容和多个不同的邮箱,然后实现定期发送。

4. 总结

使用邮箱向批量用户发送邮件,这是一个非常常见的业务。我们的邮箱中充斥着各大平台的“群发消息”,这也可以说明这个小小的功能有多大的用处。好啦,这一次分享就到这里啦,感谢您看了这么久。现在是凌晨1.56分,原创不易。如果觉得这篇文章对你有帮助的话,欢迎大家点赞评论收藏,这也是对我最大的鼓励啦!
在这里插入图片描述

在AI大模型智能体中接入企业微信,实现消息互通,通常可以通过企业微信提供的开放平台API和Webhook机制来完成。以下是详细步骤: ### 1. 注册并配置企业微信应用 首先需要在企业微信管理后台创建一个自建应用,用于与AI智能体进通信。 - 登录企业微信管理后台,进入“应用管理” -> “创建自建应用”。 - 填写应用名称、应用图标等基本信息。 - 在“可见范围”中设置应用可访问的成员或部门。 - 在“接收消息”选项中启用“接收消息API”,并配置接收消息的服务器URL、Token和EncodingAESKey。这些参数将用于验证消息来源和加密解密消息内容[^2]。 ### 2. 获取企业微信API访问权限 为了能够调用企业微信API发送和接收消息,需要获取相应的权限: - 在应用详情页中找到“API权限”部分,为应用分配“消息发送”和“消息读取”等权限。 - 获取企业微信API的访问令牌(access_token),这是调用大多数企业微信API接口所必需的参数。可以通过调用`https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET`接口,传入企业的CorpID和应用的Secret来获取[^1]。 ### 3. 配置AI智能体的消息处理逻辑 AI智能体需要能够处理来自企业微信的消息,并生成相应的回复。 - 在AI智能体的服务端,实现一个Web服务用于接收企业微信推送的消息。该服务需要能够验证消息来源(通过Token验证)、解密消息(使用EncodingAESKey),并解析消息内容。 - 根据业务需求,编写消息处理逻辑。例如,可以是简单的关键词回复,也可以是复杂的自然语言处理和对话管理。 - 智能体处理完消息后,需要构造回复消息,并通过企业微信API将回复消息发送给用户。可以使用`https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN`接口发送消息。 ### 4. 实现消息的双向同步 为了实现消息的双向同步,确保AI智能体与企业微信之间的消息流通无阻: - 在企业微信应用的“消息通知”设置中,开启“消息同步”功能,确保所有消息都能被正确推送到AI智能体的服务端。 - 对于需要长期存储的消息,可以在AI智能体的服务端实现消息持久化功能,以便后续查询和分析。 - 如果需要支持消息撤回、已读回执等功能,还需要在服务端实现相应的处理逻辑,并通过企业微信API更新消息状态。 ### 5. 安全性和稳定性保障 - 为了保证消息的安全性,建议使用HTTPS协议进通信,并在服务端实现严格的权限控制和消息验证机制。 - 为了提高系统的稳定性和可用性,建议在服务端实现消息队列和异步处理机制,以应对高并发场景下的消息处理压力。 - 同时,还需要定期监控服务的运状态,及时发现并解决可能出现的问题,确保消息互通的稳定性和可靠性[^1]。 ### 示例代码:接收企业微信消息并回复 ```python from flask import Flask, request import json import requests app = Flask(__name__) # 企业微信应用的Secret SECRET = 'your_secret' # 企业的CorpID CORPID = 'your_corpid' # 获取access_token def get_access_token(): url = f'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORPID}&corpsecret={SECRET}' response = requests.get(url) result = response.json() return result['access_token'] # 发送消息 def send_message(user_id, content): access_token = get_access_token() url = f'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}' data = { "touser": user_id, "msgtype": "text", "agentid": 1000001, # 应用的AgentId "text": { "content": content }, "safe": 0 } response = requests.post(url, data=json.dumps(data)) return response.json() @app.route('/wechat', methods=['GET', 'POST']) def handle_wechat(): if request.method == 'GET': # 验证回调URL echostr = request.args.get('echostr') return echostr else: # 处理接收到的消息 data = request.json user_id = data['FromUserName'] content = data['Content'] reply_content = f'您发送的消息是:{content}' send_message(user_id, reply_content) return 'success' if __name__ == '__main__': app.run(port=80, host='0.0.0.0') ``` ### 6. 测试与上线 - 在开发完成后,建议充分的测试,确保消息的发送、接收、处理和回复等功能都能正常工作。 - 测试通过后,可以将AI智能体的服务部署到生产环境中,并在企业微信中正式启用该应用。 - 最后,建议持续关注用户反馈和系统日志,不断优化智能体的性能和用户体验[^3]。 --- ###
评论 270
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

执章学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值