【解决163邮箱第三方客户端使用imap协议连接失败的问题】

文章讲述了在使用JavaMail库尝试通过IMAP协议连接163邮箱时遇到的UnsafeLogin错误,提供了一个包含IMAPID信息的示例代码以解决该问题。代码示例展示了如何设置Properties,创建Session,以及打开和操作收件箱来读取邮件。
摘要由CSDN通过智能技术生成

解决163邮箱第三方客户端使用imap协议连接失败的问题

  • 现象
    使用JavaMail连接失败报错内容如下:
    Unsafe Login. Please contact kefu@188.com for help

  • 具体的内容看官方的描述
    连接地址

  • 附上正确的代码

package com.face.email.data;

/**
 * 读邮件示例
 *
 * @author baixuezhi
 * @date 2023/5/4
 */
import com.sun.mail.imap.IMAPStore;

import java.util.HashMap;
import java.util.Properties;
import javax.mail.*;

@Deprecated
public class ReadMailExample {

    public static void main(String[] args) {

        String host = "imap.163.com";
        String username = "xiaobai@163.com";
        String password = "***********";

        // 获取邮件会话
        Properties props = new Properties();
        props.put("mail.store.protocol", "imaps");
        props.put("mail.imaps.host", host);
        props.put("mail.imaps.port", "993");
        //Session session = Session.getDefaultInstance(props, null);

        HashMap IAM = new HashMap();
        //带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
        IAM.put("name","ename");
        IAM.put("version","1.0.0");
        IAM.put("vendor","eclient");
        IAM.put("support-email","xiaobai@163.com");
        Session session = Session.getInstance(props);

        try {
            // 获取邮箱
            IMAPStore store = (IMAPStore) session.getStore("imaps");
            store.connect(username, password);
            store.id(IAM);
            Folder inbox = store.getFolder("inbox");
            inbox.open(Folder.READ_WRITE);


            // 获取邮件列表
            Message[] messages = inbox.getMessages();

            // 遍历邮件列表并打印邮件信息
            for (int i = 0; i < messages.length; i++) {
                Message message = messages[i];
                if (message.isSet(Flags.Flag.SEEN)) {
                    // 已读邮件
                    System.out.println("已读邮件:");
                    System.out.println("From: " + message.getFrom()[0]);
                    System.out.println("Subject: " + message.getSubject());
                    System.out.println("Sent Date: " + message.getSentDate());
                    System.out.println();
                } else {
                    // 未读邮件
                    System.out.println("未读邮件:");
                    System.out.println("From: " + message.getFrom()[0]);
                    System.out.println("Subject: " + message.getSubject());
                    System.out.println("Sent Date: " + message.getSentDate());
                    System.out.println();
                }
            }

            // 关闭邮箱
            inbox.close(false);
            store.close();

        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

  • 之所以使用imap协议不使用smtp协议是因为,imap协议可以判断邮件是否已读,但是imap协议只支持邮件读取不支持发送,所以想要发送邮件还是需要smtp协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值