• 编程处理邮件


    一、常用邮箱的SMTP端口号

    gmail(google.com)
    POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
    SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)

    21cn.com:
    POP3服务器地址:pop.21cn.com(端口:110)
    SMTP服务器地址:smtp.21cn.com(端口:25)

    sina.com:
    POP3服务器地址:pop3.sina.com.cn(端口:110)
    SMTP服务器地址:smtp.sina.com.cn(端口:25)

    163.com:
    POP3服务器地址:pop.163.com(端口:110)
    SMTP服务器地址:smtp.163.com(端口:25)

    yahoo.com:
    POP3服务器地址:pop.mail.yahoo.com
    SMTP服务器地址:smtp.mail.yahoo.com

    yahoo.com.cn:
    POP3服务器地址:pop.mail.yahoo.com.cn(端口:995)
    SMTP服务器地址:smtp.mail.yahoo.com.cn(端口:587)

    sohu.com:
    POP3服务器地址:pop3.sohu.com(端口:110)
    SMTP服务器地址:smtp.sohu.com(端口:25)

    Foxmail:
    POP3服务器地址:POP.foxmail.com(端口:110)
    SMTP服务器地址:SMTP.foxmail.com(端口:25)

    通过以上邮箱,基本上可以找到如下规律:

    • SMTP服务或者25端口,或者587端口
    • POP3服务基本是110端口或者995端口
    • 主机地址基本上就是xxxxx@host.com中的host

    关于邮箱,需要知道两个网络协议:SMTP网络协议和POP协议,SMTP是用来发送邮件服务器,POP是读取邮件服务器。

    二、使用Java实现邮件发送

    需要用到javax.mail怎么下载呢?百度javax.mail就会看见http://www.oracle.com/technetwork/java/index-138643.html实际上这个项目是www.java.net网站上面的项目。

    下面的用javax.mail从163邮箱向qq邮箱发送邮件。

    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Date;
    import java.util.Properties;
    
    public class Haha {
        public static void sendMail(String fromMail, String user, String password, String toMail, String mailTitle,
                String mailContent) throws Exception {
            Properties props = new Properties(); // 可以加载一个配置文件
            props.put("mail.smtp.host", "smtp.163.com");
            Session session = Session.getInstance(props);// 根据属性新建一个邮件会话
            session.setDebug(true); // 有他会打印一些调试信息。
    
            MimeMessage message = new MimeMessage(session);// 由邮件会话新建一个消息对象
            message.setFrom(new InternetAddress(fromMail));// 设置发件人的地址
            message.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail));
            message.setSubject(mailTitle);// 设置标题
            //message.setText(mailContent); // 发送 纯文本 邮件
            message.setContent(mailContent, "text/html;charset=gbk"); // 发送HTML邮件,内容样式比较丰富
            message.setSentDate(new Date());// 设置发信时间
            message.saveChanges();// 存储邮件信息
    
            Transport transport = session.getTransport("smtp");
            transport.connect(user, password);
            transport.sendMessage(message, message.getAllRecipients());// 发送邮件,其中第二个参数是所有已设好的收件人地址
            transport.close();
        }
    
        public static void main(String[] args) throws Exception {
            sendMail("xxxxx@163.com", "xxxxxxx@163.com", "网易邮箱密码", "收件人邮箱@qq.com", "Java Mail 测试邮件",
                    "<a>html 元素</a>:<b>邮件内容</b>");
        }
    }
    

    Apache对javax.mail进行了一下封装,叫org.apache.commons.mail

    import org.apache.commons.mail.EmailException;
    import org.apache.commons.mail.HtmlEmail;
    
    public class Main {
    
        public static void main(String[] args) {
            new Main();
        }
    
        Main() {
            try {
                HtmlEmail email = new HtmlEmail();
                email.setHostName("smtp.qq.com");
                email.setSmtpPort(587);
                email.setAuthentication("xxxxx@qq.com", "激活smtp功能后的验证码");
                email.addTo("xxxxx@qq.com");
                email.setFrom("xxxxx@qq.com");
                email.setMsg("鹏哥,咱们是整着玩的,别老是想着一鸣惊人。");
                email.send();
            } catch (EmailException e) {
                e.printStackTrace();
            }
        }
    }
    

    三、使用Python发送邮件

    import smtplib
    from email.mime.text import MIMEText
    
    server = smtplib.SMTP("smtp.163.com")
    server.login("18304049305@163.com", "xxxxxx")
    message = MIMEText("weidiao is great")
    message["Subject"] = "haha"
    message["from"] = "xxxxx.com"
    message["to"] = "xxxx@qq.com"
    server.sendmail("18304049305@163.com", ["1661686074@qq.com"], message.as_string())
    server.quit()
    

    四、发送邮件注意事项

    1、163邮箱

    发邮件需要让服务器发邮件,如果是163邮箱,直接弄就行。163邮箱

    2、qq邮箱

    如果是通过qq邮箱发邮件,就要进行一些设置。一运行,qq邮箱会告诉你去一个链接学习一下:http://service.mail.qq.com/cgi-bin/help?id=28

    上面这个链接详细解释了所有内容,可以顺便学学一些协议。

    需要激活qq邮箱的smtp功能(在qq邮箱中进行账户设置),并且端口也很重要,发送端口和接收端口不是一回事,详见http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=369

    3、gmail邮箱

    使用Gmail需要给不同的的应用设置不同的密码,也就是应用的专有密码
    https://support.google.com/accounts/answer/185833

    五、使用telnet登录SMTP服务器发送邮件

    telnet smtp.buaa.edu.cn 25  
    220 buaa.edu.cn Anti-spam GT for Coremail System (buaa[20140724])  
    helo localhost  
    250 OK  
    auth login  
    334 dXNlcm5hbWU6  
    ZGluZbaseb4email  
    334 UGFzc3dvcmQ6  
    Zbase64password  
    235 Authentication successful  
    mail from:<dingsai88@buaa.edu.cn>  
    250 Mail OK  
    rcpt to:<dingsai88@qq.com>  
    250 Mail OK  
    data  
    354 End data with <CR><LF>.<CR><LF>  
    from:<dingsai88@buaa.edu.cn>  
    to:<dingsai88@qq.com>  
    subject:hello,dingsai88@qq.com  
      
    hello smtp  
    .  
    250 Mail OK queued as AQAQrABnbdGqjxlXSNvqAA--.7207S2  
    

    命令解析

    telnetsmtp.buaa.edu.cn 25   --填写smtp地址和端口
    220 buaa.edu.cn Anti-spam GT for CoremailSystem (buaa[20140724])
    helo localhost
    250 OK
    authlogin
    334 dXNlcm5hbWU6
    ZGluZbaseb4email  --发件箱的base64
    334 UGFzc3dvcmQ6
    Zbase64password --发件箱密码base64
    235 Authentication successful
    mailfrom:<dingsai88@buaa.edu.cn>  --发件箱地址
    250 Mail OK
    rcptto:<dingsai88@qq.com>  --收件箱地址 可多次添加
    250 Mail OK
    data         --开始添加正文
    354 End data with<CR><LF>.<CR><LF>
    from:<dingsai88@buaa.edu.cn>
    to:<dingsai88@qq.com>
    subject:hello,dingsai88@qq.com
                               --空一行填写
    hellosmtp
    .                               --最后一行以.结束
    250 Mail OK queued asAQAQrABnbdGqjxlXSNvqAA--.7207S2
    "."是结束
    
  • 相关阅读:
    ADO.NET之使用DataSet类更新数据库
    ADO.NET之填充DataSet类
    ADO.NET之DataSet类
    ADO.NET之存储过程的调用(更删改查数据库)
    [Python]小甲鱼Python视频第011课(列表:一个打了激素的数组2)课后题及参考解答
    [Python]小甲鱼Python视频第010课(列表:一个打了激素的数组)课后题及参考解答
    [Python]小甲鱼Python视频第009课(了不起的分支和循环3)课后题及参考解答
    [Python]小甲鱼Python视频第007-008课(了不起的分支和循环)课后题及参考解答
    [Python]小甲鱼Python视频第006课(Pyhon之常用操作符)课后题及参考解答
    [Python]小甲鱼Python视频第005课(Python的数据类型)课后题及参考解答
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/8678917.html
Copyright © 2020-2023  润新知