java实现邮箱验证QQ邮箱验证和Foxmail验证

这两天公司要求做个Android端邮箱认证,android端还是很简单的,主要难点在后台链接邮箱并发送邮件。
思路:android端传送邮箱地址给后台,后台获取邮箱地址后,链接公司邮箱,并发送验证码邮件,并返回邮箱地址+验证码给Android端,Android进行验证邮箱地址和验证码是否匹配。

直接上后台代码,已经写成工具类,注释很清楚了。

工程需要导入mail.jar 架包下载地址

import java.util.Properties;
import java.util.Random;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;

public class MailboxVerification {

    public static void main(String args[]) {
        qqSendMail("发件邮箱", "邮箱密码", "smtp.qq.com",
         "收件邮箱");

         foxmailSendMail("发件邮箱", "密码",
         "邮件服务器", "收件人邮箱");
    }

    /**
     * Foxmail邮箱验证
     * 
     * @param fromMail
     *            发件人邮箱
     * @param fromPwd
     *            发件人密码
     * @param mailServicer
     *            邮件服务器
     * @param toMail
     *            收件人邮箱
     * @return 收件人邮箱+验证码
     */
    public static String foxmailSendMail(String fromMail, String fromPwd,
            String mailServicer, String toMail) {
        String code = createCode();
        StringBuffer st = new StringBuffer();
        // 获取系统属性
        Properties properties = new Properties();
        // 身份验证开启
        properties.put("mail.smtp.auth", "true");
        // debug模式
        properties.put("mail.debug", "true");
        // 邮件服务器
        properties.setProperty("mail.host", mailServicer);
        // 邮箱传送协议
        properties.setProperty("mail.transport.protocol", "smtp");
        // 获取默认session对象
        Session session = Session.getInstance(properties);
        session.setDebug(true);
        try {
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);
            // 头部头字段
            message.setFrom(new InternetAddress(fromMail));
            // 头部头字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(
                    toMail));
            // 头部头字段
            message.setSubject("请及时验证邮箱");
            // 设置消息体
            message.setText("邮箱验证码:" + code);
            Transport transport = session.getTransport();
            transport.connect(mailServicer, fromMail, fromPwd);
            transport.sendMessage(message, new Address[] { new InternetAddress(
                    toMail) });
            transport.close();
            st.append(toMail + ":" + code);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return st.toString();
    }

    /**
     * QQ邮箱验证
     * 
     * @param fromMail
     *            发件人邮箱
     * @param fromPwd
     *            发件人密码
     * @param mailServicer
     *            邮件服务器
     * @param toMail
     *            收件人邮箱
     * @return 收件人邮箱+验证码
     */
    public static String qqSendMail(String fromMail, String fromPwd,
            String mailServicer, String toMail) {
        String code = createCode();
        StringBuffer st = new StringBuffer();
        Properties props = new Properties();
        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", mailServicer);
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");
        try {
            // 添加ssl加密,qq需要传输过程ssl加密
            MailSSLSocketFactory sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable", "true");
            props.put("mail.smtp.ssl.socketFactory", sf);
            Session session = Session.getInstance(props);
            // 邮件内容部分
            Message msg = new MimeMessage(session);
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
                    toMail));
            // 头部头字段
            msg.setSubject("请及时验证邮箱");
            // 设置消息体
            msg.setText("邮箱验证码:" + code);
            // 邮件发送者
            msg.setFrom(new InternetAddress(fromMail));
            // 发送邮件
            Transport transport = session.getTransport();
            transport.connect(mailServicer, fromMail, fromPwd);
            transport.sendMessage(msg, new Address[] { new InternetAddress(
                    toMail) });
            transport.close();
            st.append(toMail + ":" + code);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return st.toString();
    }

    /**
     * 产生四位随机数
     * 
     * @return
     */
    public static String createCode() {
        Random random = new Random();
        String fourRandom = random.nextInt(10000) + "";
        int randLength = fourRandom.length();
        if (randLength < 4) {
            for (int i = 1; i <= 4 - randLength; i++)
                fourRandom = "0" + fourRandom;
        }
        return fourRandom;
    }
}

总结:
1、老报身份验证异常,然后开启debug,也没有看到有用的信息,猜想是身份验证时候的姿势出错了。
2、 解决方案qq开启pop3和smtp验证,会产生一段第三方登录的授权码,这个就是发件邮箱的登录密码。
3、foxmail、QQ验证时,不要把发件人邮箱的地址和密码放到props对象里,而是通过transport链接的时候,携带用户名和密码。

注意以上问题,就可以解决身份验证失败BUG。

<think>好的,我现在需要处理用户的问题,他们希望将完整的项目代码压缩包发送到邮箱。首先,我应该明确用户的具体需求,可能他们是在请求帮助发送文件,或者询问如何操作。 用户可能的情况有两种:一种是他们自己需要发送代码压缩包,但不知道方法;另一种是希望我直接发送文件到他们的邮箱。由于我无法发送文件或访问外部系统,应该排除后者,专注于指导用户如何自行操作。 接下来,我需要考虑用户的技术水平。如果他们不太熟悉压缩文件邮件发送,需要分步骤说明。首先,确认项目文件夹的位置,然后压缩文件,选择压缩格式如ZIP或RAR。接着,登录邮箱,撰写新邮件,添加附件,输入收件地址主题,最后发送。 同时,要注意提醒用户检查文件是否完整,避免遗漏依赖项或配置文件。可能需要提到常见的注意事项,比如文件大小限制、邮箱安全设置等潜在问题。 此外,用户可能有深层需求,比如确保代码保密性,或者在发送前进行测试。可以建议压缩前删除不必要的文件,或提供文件结构说明,帮助接收方更好地理解项目。 最后,确保语言简洁明了,步骤清晰,避免使用专业术语过多,适合不同技术水平的用户理解。如果有必要,可以补充不同操作系统下的操作差异,比如WindowsmacOS在压缩文件时的步骤区别。 总结下来,回答需要分步骤指导,涵盖压缩文件、邮件发送的流程,以及注意事项,确保用户能顺利完成操作,并预防常见问题。</think>发送完整项目代码压缩包到邮箱的操作步骤如下(以Windows系统为例): ### 一、准备工作 1. **确认项目完整性** - 检查是否包含所有源代码文件(如`.py`, `.java`, `.html`等) - 确认依赖文件存在(如`requirements.txt`, `package.json`) - 检查配置文件(如`.env`, `config.yaml`) 2. **清理无用文件** - 删除`node_modules`, `__pycache__`等临时目录 - 移除`.log`, `.tmp`等临时文件 - 建议文件总大小控制在25MB以内(避免邮箱附件限制) ### 二、压缩项目文件 1. **全选项目文件** - 右键点击项目根目录 ➔ 选择"全选"(或`Ctrl+A`) 2. **创建压缩包** ```powershell # 右键菜单选择"发送到" ➔ "压缩(zipped)文件夹" # 推荐命名格式:ProjectName_V1.0_YYYYMMDD.zip ``` ### 三、通过邮箱发送 1. **登录邮箱** - 网页端:打开浏览器访问邮箱服务(如mail.qq.com/mail.163.com) - 客户端:打开Outlook/Foxmail等软件 2. **撰写邮件** ```markdown 收件人: [目标邮箱地址] 主题: [项目名称]代码文件 - [日期] 正文: 尊敬的接收方: 附件为[项目名称]的完整代码压缩包,包含: - 核心模块(xx目录) - 配置文件(xx文件) - 依赖说明(requirements.txt) 如需技术支持请随时联系。 ``` 3. **添加附件** - 点击「曲别针」图标 ➔ 选择压缩包文件 - 建议添加双重验证(如压缩包密码+单独发送解压密码) ### 四、注意事项 1. **安全建议** - 敏感信息处理:使用`git rm --cached`移除历史记录中的密钥 - 建议加密压缩:使用7-Zip设置AES-256加密 2. **兼容性检查** - 解压测试:在不同操作系统(Windows/macOS/Linux)验证压缩包 - 编码检查:确保无中文路径/文件名乱码问题 3. **替代方案** ```bash # 如果附件过大可使用云存储: git bundle create repo.bundle --all # 创建Git打包文件 # 或使用wetransfer等文件传输服务 ``` ### 五、确认发送 1. 点击发送前再次检查: - 收件人邮箱是否正确 - 附件是否完整加载 - 正文是否包含必要说明 按照以上步骤操作即可安全、完整地发送项目代码。如果遇到邮箱附件大小限制,建议拆分压缩包或改用云存储链接共享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值