zoukankan      html  css  js  c++  java
  • 编程处理邮件

    一、常用邮箱的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
    "."是结束
    
  • 相关阅读:
    Educational Codeforces Round 86 (Rated for Div. 2) D. Multiple Testcases
    Educational Codeforces Round 86 (Rated for Div. 2) C. Yet Another Counting Problem
    HDU
    HDU
    HDU
    HDU
    Good Bye 2019 C. Make Good (异或的使用)
    Educational Codeforces Round 78 (Rated for Div. 2) C. Berry Jam
    codeforces 909C. Python Indentation
    codeforces1054 C. Candies Distribution
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/8678917.html
Copyright © 2011-2022 走看看