精华内容
下载资源
问答
  • 基于JavaMail的Java邮件发送:简单邮件发送

    万次阅读 多人点赞 2016-06-14 21:56:35
    电子邮件的应用非常广泛,例如在某网站注册了一个...但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发...

    本文链接: https://blog.csdn.net/xietansheng/article/details/51673073

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

    1. 电子邮件协议

    电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

    2. JavaMail

    我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载,这里我从 JavaEE 官方的 Github 仓库下载。

    JavaMail 下载地址: https://github.com/javaee/javamail/releases

    这里我下载的版本是 1.6.0 版本,包含了 SMTP, IMAP, 和 POP3 协议的实现的 jar 包:

    javaxmail.png

    我把 JavaMail 1.6.0 的 jar 包上传到了 CSDN,如果无法从 Github 下载,可以从 CSDN 下载(建议到Github下载,CSDN上我设了积分): http://download.csdn.net/download/xietansheng/9928266

    特别注意:

    • 本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用 JavaMail 1.6.0 版本再进行尝试。
    • 使用 JavaMail 1.6.0 要求的 JDK 版本必须是 JDK 1.7 以上(建议使用最新版 JDK)。
    • 不要直接就完完全全复制我的代码,需要 修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送(自己也不要反复发送内容相同的邮件),内容一致的邮件多次发送,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

    有些童鞋反应代码提示某些类找不到,或运行出现问题,往往都是 JDK 版本过低,或 JavaMail 版本过低,出现问题时 请使用推荐的版本

    再出现问题,只要能连接成功,都有错误码返回,有些童鞋发送失败在控制台已经给出了错误码,大部分还给出了查看错误码含义的链接,点开链接,查询对应的错误码,为什么失败,已经明明白白的告诉你了,针对失败原因修改即可!

    邮件发送,涉及多端(本地代码端、邮件发送服务器端、邮件接收服务器端),保证自己的代码没问题了,不一定就能成功,你把你的邮件提交到邮件发送服务器,发送的服务器可以给你拒绝服务(比如认为发送的内容是垃圾广告,或者你频繁请求发送),这不是代码端能管的事情,但都有错误码返回,明确告诉你为什么错误。就算你发送成功了,对方也有可能接收不到,成功发送到对方的邮件接收服务器后,对方的服务器可以根据你的内容拒绝收你的邮件(比如认为你的内容是广告诈骗等信息,或者发送过于频繁),对方的服务器可能直接把你的邮件扔垃圾箱,或者直接忽略。出现这些问题,请修改发送的标题、内容、昵称等,重复的内容不要反复发送,或多更换收件箱和发件箱试试!!!

    3. 创建一封简单的电子邮件

    首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程,这里不多说。

    邮件创建步骤:

    1. 创建一个邮件对象(MimeMessage);
    2. 设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
    3. 设置邮件的主题(标题);
    4. 设置邮件的正文(内容);
    5. 设置显示的发送时间;
    6. 保存到本地。

    代码实现:

    package com.xiets.javamaildemo;
    
    import javax.mail.Session;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.Date;
    import java.util.Properties;
    
    /**
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     */
    public class Main {
    
        public static void main(String[] args) throws Exception {
            // 1. 创建一封邮件
            Properties props = new Properties();
            // 用于连接邮件服务器的参数配置(发送邮件时才需要用到)
            Session session= Session.getInstance(props);        // 根据参数配置,创建会话对象(为了发送邮件准备的)
            MimeMessage message = new MimeMessage(session);     // 创建邮件对象
    
            /*
             * 也可以根据已有的eml邮件文件创建 MimeMessage 对象
             * MimeMessage message = new MimeMessage(session, new FileInputStream("MyEmail.eml"));
             */
    
            // 2. From: 发件人
            //    其中 InternetAddress 的三个参数分别为: 邮箱, 显示的昵称(只用于显示, 没有特别的要求), 昵称的字符集编码
            //    真正要发送时, 邮箱必须是真实有效的邮箱。
            message.setFrom(new InternetAddress("aa@send.com", "USER_AA", "UTF-8"));
    
            // 3. To: 收件人
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress("cc@receive.com", "USER_CC", "UTF-8"));
            //    To: 增加收件人(可选)
            message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
            //    Cc: 抄送(可选)
            message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
            //    Bcc: 密送(可选)
            message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));
    
            // 4. Subject: 邮件主题
            message.setSubject("TEST邮件主题", "UTF-8");
    
            // 5. Content: 邮件正文(可以使用html标签)
            message.setContent("TEST这是邮件正文。。。", "text/html;charset=UTF-8");
    
            // 6. 设置显示的发件时间
            message.setSentDate(new Date());
    
            // 7. 保存前面的设置
            message.saveChanges();
    
            // 8. 将该邮件保存到本地
            OutputStream out = new FileOutputStream("MyEmail.eml");
            message.writeTo(out);
            out.flush();
            out.close();
        }
    
    }
    

    保存的 MyEmail.eml 可以使用邮件客户端打开查看,实际上就是一堆符合SMTP协议格式的文本(内容使用base64进行了编码),也可用记事本打开,如下所示:

    my-email.png

    my-email-txt.png

    4. 发送电子邮件

    发送邮件首先需要有一个邮箱账号和密码,本文以网易163邮箱为例,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址,如下所示(其他邮箱大同小异):

    smtp-163-setting.jpg

    代码实现:

    package com.xiets.javamaildemo;
    
    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;
    
    /**
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     */
    public class Main {
    
        // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
        // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”), 
        //     对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
        public static String myEmailAccount = "xxxxxxxxx@163.com";
        public static String myEmailPassword = "xxxxxxxxx";
    
        // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
        // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
        public static String myEmailSMTPHost = "smtp.163.com";
    
        // 收件人邮箱(替换为自己知道的有效邮箱)
        public static String receiveMailAccount = "xxxxxxxxx@qq.com";
    
        public static void main(String[] args) throws Exception {
            // 1. 创建参数配置, 用于连接邮件服务器的参数配置
            Properties props = new Properties();                    // 参数配置
            props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
            props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
            props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
    
            // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
            //     如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
            //     打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
            /*
            // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
            //                  需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
            //                  QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
            final String smtpPort = "465";
            props.setProperty("mail.smtp.port", smtpPort);
            props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.setProperty("mail.smtp.socketFactory.fallback", "false");
            props.setProperty("mail.smtp.socketFactory.port", smtpPort);
            */
    
            // 2. 根据配置创建会话对象, 用于和邮件服务器交互
            Session session = Session.getInstance(props);
            session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
    
            // 3. 创建一封邮件
            MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
    
            // 4. 根据 Session 获取邮件传输对象
            Transport transport = session.getTransport();
    
            // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
            // 
            //    PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
            //           仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
            //           类型到对应邮件服务器的帮助网站上查看具体失败原因。
            //
            //    PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
            //           (1) 邮箱没有开启 SMTP 服务;
            //           (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
            //           (3) 邮箱服务器要求必须要使用 SSL 安全连接;
            //           (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
            //           (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
            //
            //    PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
            transport.connect(myEmailAccount, myEmailPassword);
    
            // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(message, message.getAllRecipients());
    
            // 7. 关闭连接
            transport.close();
        }
    
        /**
         * 创建一封只包含文本的简单邮件
         *
         * @param session 和服务器交互的会话
         * @param sendMail 发件人邮箱
         * @param receiveMail 收件人邮箱
         * @return
         * @throws Exception
         */
        public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
            // 1. 创建一封邮件
            MimeMessage message = new MimeMessage(session);
    
            // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
            message.setFrom(new InternetAddress(sendMail, "某宝网", "UTF-8"));
    
            // 3. To: 收件人(可以增加多个收件人、抄送、密送)
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
    
            // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
            message.setSubject("打折钜惠", "UTF-8");
    
            // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
            message.setContent("XX用户你好, 今天全场5折, 快来抢购, 错过今天再等一年。。。", "text/html;charset=UTF-8");
    
            // 6. 设置发件时间
            message.setSentDate(new Date());
    
            // 7. 保存设置
            message.saveChanges();
    
            return message;
        }
    
    }
    

    发送后查看收件人的收件箱:

    sended-email.jpg


    包含文本、图片、附件 的复杂邮件的创建请看下一篇:基于 JavaMail 的 Java 邮件发送:复杂邮件发送


    展开全文
  • * 本例支持所有smtp协议邮件发送 * 有问题请加QQ群:605335073 */ public class MailUtil { public static void main(String[] args) throws Exception { // 发件人邮箱的 SMTP 服务器地址, 必须准确, ...

    1、所需包: javax.mail.jar 

      maven :  

    <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
    <dependency>
       <groupId>javax.mail</groupId>
       <artifactId>mail</artifactId>
       <version>1.4.4</version>
    

    </dependency>

    2、代码部分(java)

    
    
    package com.susumitec.util.mail;
    
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Properties;
    
    
    /**
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     * 本例支持所有smtp协议邮件发送
     * 有问题请加QQ群:605335073
     */
    public class MailUtil { public static void main(String[] args) throws Exception { // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com String myEmailSMTPHost = "smtp.163.com"; MailModel model = new MailModel(); model.setFromName( "豪尔"); model.setFromUser( "***@163.com"); model.setMyEmailPassword( "***"); model.setContent( "你好"); model.setDate( new Date()); model.setDebug( true); model.setTitle( "接收文件"); model.setBcc( "910206656@qq.com"); model.setDuplicateUser( "910206656@qq.com"); model.setToUser( "910206656@qq.com"); MailUtil. getInstance(myEmailSMTPHost). sendMail(model); } private static MailUtil util = null; private static Properties props; private static Session session; public static MailUtil getInstance(String myEmailSMTPHost) { if ( util == null) { synchronized (MailUtil. class) { if ( util == null) { util = new MailUtil(myEmailSMTPHost); } } } return util; } public MailUtil(String myEmailSMTPHost) { init(myEmailSMTPHost); } private void init(String myEmailSMTPHost) { // 1. 创建参数配置, 用于连接邮件服务器的参数配置 props = new Properties(); // 参数配置 props.setProperty( "mail.transport.protocol", "smtp"); // 使用的协议(JavaMail规范要求) props.setProperty( "mail.smtp.host", myEmailSMTPHost); // 发件人的邮箱的 SMTP 服务器地址 props.setProperty( "mail.smtp.auth", "true"); // 需要请求认证 session = Session. getInstance( props); session.setDebug( true); // 设置为debug模式, 可以查看详细的发送 log } private static Boolean sendMail(MailModel model) throws Exception { session.setDebug(model.getDebug()); // 设置为debug模式, 可以查看详细的发送 log // 3. 创建一封邮件 MimeMessage message = createMimeMessage( session, model); // 4. 根据 Session 获取邮件传输对象 Transport transport = session.getTransport(); // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错 // // PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log, // 仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误 // 类型到对应邮件服务器的帮助网站上查看具体失败原因。 // // PS_02: 连接失败的原因通常为以下几点, 仔细检查代码: // (1) 邮箱没有开启 SMTP 服务; // (2) 邮箱密码错误, 例如某些邮箱开启了独立密码; // (3) 邮箱服务器要求必须要使用 SSL 安全连接; // (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务; // (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。 // // PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。 transport.connect(model.getFromUser(), model.getMyEmailPassword()); // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人 transport.sendMessage(message, message.getAllRecipients()); // 7. 关闭连接 transport.close(); return true; } /** * 创建一封只包含文本的简单邮件 * * @param session 和服务器交互的会话 * @return * @throws Exception */ public static MimeMessage createMimeMessage(Session session, MailModel model) throws Exception { // 1. 创建一封邮件 MimeMessage message = new MimeMessage(session); // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称) message.setFrom( new InternetAddress(model.getFromUser(), model.getFromName(), "UTF-8")); // 3.1. To: 收件人(可以增加多个收件人、抄送、密送) if(model.getToUser() != null) { message.setRecipients(MimeMessage.RecipientType. TO, address(model.getToUser())); } // 3.2. To: 收件人(可以增加多个收件人、抄送、密送) if(model.getDuplicateUser() != null) { message.setRecipients(MimeMessage.RecipientType. CC, address(model.getDuplicateUser())); } // 3.2. To: 收件人(可以增加多个收件人、抄送、密送) if(model.getBcc() != null){ message.setRecipients(MimeMessage.RecipientType. BCC, address(model.getBcc())); } // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题) message.setSubject(model.getTitle(), "UTF-8"); // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容) message.setContent(model.getContent(), "text/html;charset=UTF-8"); // 6. 设置发件时间 message.setSentDate(model.getDate()); // 7. 保存设置 message.saveChanges(); return message; } /** * str="xxx@xxx.com,xxx@xxx.com"; * * @return * @throws Exception */ public static InternetAddress[] address(String toUsers) throws Exception { //多个接收账号 InternetAddress[] address = null; try { List list = new ArrayList(); //不能使用string类型的类型,这样只能发送一个收件人 String[] median = toUsers.split( ","); //对输入的多个邮件进行逗号分割 for ( int i = 0; i < median. length; i++) { list.add( new InternetAddress(median[i], "UTF-8")); } address = (InternetAddress[]) list.toArray( new InternetAddress[list.size()]); } catch (Exception e) { e.printStackTrace(); } return address; }} class MailModel { private Boolean isDebug; // 设置为debug模式, 可以查看详细的发送 log private String fromUser; //发送人 private String fromName; //发送人名称 private String duplicateUser; //抄送 private String bcc; //密送人 private String title; //标题 private String toUser; //收件人 private String content; //发送内容 private String myEmailPassword; //独立密码(授权码) private Date date; // 发送时间 public String getBcc() { return bcc; } public void setBcc(String bcc) { this. bcc = bcc; } public Date getDate() { return date; } public void setDate(Date date) { this. date = date; } public String getMyEmailPassword() { return myEmailPassword; } public void setMyEmailPassword(String myEmailPassword) { this. myEmailPassword = myEmailPassword; } public Boolean getDebug() { return isDebug; } public void setDebug(Boolean debug) { isDebug = debug; } public String getTitle() { return title; } public void setTitle(String title) { this. title = title; } public String getFromUser() { return fromUser; } public void setFromUser(String fromUser) { this. fromUser = fromUser; } public String getFromName() { return fromName; } public void setFromName(String fromName) { this. fromName = fromName; } public String getDuplicateUser() { return duplicateUser; } public void setDuplicateUser(String duplicateUser) { this. duplicateUser = duplicateUser; } public String getToUser() { return toUser; } public void setToUser(String toUser) { this. toUser = toUser; } public String getContent() { return content; } public void setContent(String content) { this. content = content; }}
    //有问题请加QQ群:605335073
    展开全文
  • python实现smtp协议发送邮件

    千次阅读 2018-09-10 18:37:48
     (1) SMTP协议(simple mail transfer protocol) 简单邮件传输协议  (2) 定义了邮件客户端与SMTP服务器之间、两台SMTP服务器之间的通信规则  (3) 分为标准SMTP协议和扩展SMTP协议。扩展SMTP协议在标准SMTP协议上...

    协议简介:
        SMTP和POP3/IMAP协议的一些介绍

    1.SMTP协议
         (1) SMTP协议(simple mail transfer protocol) 简单邮件传输协议
         (2) 定义了邮件客户端与SMTP服务器之间、两台SMTP服务器之间的通信规则
         (3) 分为标准SMTP协议和扩展SMTP协议。扩展SMTP协议在标准SMTP协议上增加了邮件
         安全的认证
         (4) 通信双方采用一问一答的命令/响应模式
         (5) 底层基于TCP/IP的应用层协议、默认网络监听号25

    2.POP3协议
        (1) 用户要从服务提供商提供的电子邮件中获取自己的电子邮件,需要POP3邮件服务器帮组完成
    而POP3(Post Office Protocol) 定义了邮件客户端与POP3服务器通信规则。
        (2) POP3采用的网络监听端口号默认为110

    3.IMAP协议
        (1) IMAP (internet Message Access Protocol) 协议是对POP3协议的一种扩展
        (2) 相对于POP3协议而言,定义了更为强大的邮件接收功能
            IMAP具有摘要浏览功能
            IAP可以让用户有选择性地下载邮件附件
            IMAP可以让用户在邮件服务器上创建自己的邮件夹,分类保存各个邮件
        (3) IMAP协议在逐渐取代POP3协议,但POP3协议长期存在也不会在短期内淘汰,所以我们看到
    还是两种协议并存

    smtplocalhost.py 直接由自己搭建的邮件服务器发送,我这里ubuntu正在配置

    # -*- coding: utf-8 -*-
    # @Author: Clarence
    # @Date:   2018-08-29 22:52:18
    # @Last Modified by:   Clarence
    # @Last Modified time: 2018-09-10 15:13:28
    
    """
    Python3 SMTP发送邮件
    python的smtplib提供一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装
    Python创建SMTP对象语法如下:
    import smtplib
    smtpObj = smtplib.SMTP( [host [, port[, local_hostname]]])
    参数:
    	host: SMTP服务器主机。你可以指定主机的ip地址或者域名字符串(本地'localhost').
    	port: 如果你提供了host参数,你需要指定SMTP服务使用的端口号,一般情况下SMTP端口号为25
    	local_hostname: 如果SMTP在你的本机上,你只需要指定服务器地址为localhost即可
    Python SMTP对象使用sendmail方法发送邮件,语法如下:
    SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
    参数:
    	from_addr: 邮件发送者地址
    	to_addrs:字符串列表,邮件发送地址
    	msg:发送消息 字符串,邮件一般有标题,发信人,收信人,邮件内容,附件等构成,发送邮件的时候,
    	要注意msg的格式。这个格式就是smtp协议中定义的格式。
    """
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = 'smtp.mandrillapp.com'
    receivers = ['xxxxxxxxxxxxx@qq.com'] #接受邮件,可以设置为你的QQ邮箱或者其他邮箱
    
    # 三个参数: 第一个为文本内容,第二个plain设置文本格式,第三个utf-8设置编码
    """
    MIME类型(Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准
    MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据
    不同的应用程序支持不同的MIME类型 plain是纯文本格式
    """
    message = MIMEText('Python邮件发送测试...', 'plain', 'utf-8')
    message['From'] = Header("菜鸟教程", "utf-8") #发送者
    message['To'] = Header('测试', 'utf-8') # 接受者
    
    subject = 'Python SMTP邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
    
    try:
    	print(type(message), message)
    	smtpObj = smtplib.SMTP('localhost') 
    	smtpObj.sendmail(sender, receivers, message.as_string())
    	print('邮件发送成功')
    except smtplib.SMTPException:
    	print("Error: 无法发送邮件") 
    
    """
    <class 'email.mime.text.MIMEText'> Content-Type: text/plain; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: base64
    From: =?utf-8?b?6I+c6bif5pWZ56iL?=
    To: =?utf-8?b?5rWL6K+V?=
    Subject: =?utf-8?b?UHl0aG9uIFNNVFDpgq7ku7bmtYvor5U=?=
    
    UHl0aG9u6YKu5Lu25Y+R6YCB5rWL6K+VLi4u
    可以看到打印出来的message这个MIME文本类,里面包含的内容是编码类型,数据类型,MIME版本,以及传输的编码格式base64,
    下面是邮件的首发地址,可以看到这是用base64编码之后的地址
    
    //这里出现由于目标计算机积极拒绝,无法连接错误的原因是,邮件服务器需要认证登陆,大家可以在linux或者win配置sendmail服务端,然后尝试
    smtp = smtplib.SMTP_SSL(smtpserver, 465)
    smtp.helo()
    smtp.ehlo()
    smtp.login(user, password)来认证 
    """

    通过腾讯或其他的SMTP服务来发送邮箱

    smtpremote.py

    # -*- coding: utf-8 -*-
    # @Author: Clarence
    # @Date:   2018-09-10 11:25:25
    # @Last Modified by:   Clarence
    # @Last Modified time: 2018-09-10 16:54:15
    """
    如果本机没有sendmail访问,可以使用其他服务商的SMTP访问(QQ、网易、Google等)
    一个具体的STMP通信(如发送端邮件服务器与接收端服务器的通信)的过程如下:
    1) 发送端邮件服务器(以下简称客户端)与接收端邮件服务器(以下简称服务器)的25号端口建立TCP连接
    2) 客户端向服务器发送各种命令,来请求各种服务(如认证、指定发送人和接收人)
    3)服务器解析用户的命令,做出相应动作并返回给客户端一个响应。
    4) 2)和3)交替进行,知道所有邮件都发送完成或两者的连接被意外中断
    """
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    # 第三方SMTP服务
    mail_host = "smtp.qq.com" # 设置服务器
    #自己的邮箱,通过QQ邮箱设置获取口令
    mail_user = "xxxxxxxxxx@qq.com" #用户名
    mail_pass = "xxxxxxxxxx" # 口令
    
    sender = 'xxxxxxxxxxx@qq.com'
    receivers = ['xxxxxxxxx@qq.com'] #接受者的邮箱,我的另一个QQ邮箱
    
    '''
    如果发送HTML格式的邮件,那么改变MIME类型就可以
    发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype设置为html
    mail_msg = """
    <p>Python 邮件发送测试...<p>
    <p><a href="http://www.baidu.com">这是一个链接</a></p>
    """
    message=MIMEText(mail_msg, 'html', 'utf-8')
    '''
    
    # class email.mime.text.MIMEText(_text[, _subtype[, _charset]]) 用于创建主要类型文本的MIME对象,_text是有效负载的字符串,_subtype
    # 是次要类型,默认为plain._charset是文本的字符集
    message  = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
    message['From'] = Header("菜鸟教程", 'utf-8')
    message['To'] = Header("xxxxxxxxxxx@qq.com", 'utf-8')
    
    subject = 'Python SMTP  邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
    
    try:
    	smtpObj = smtplib.SMTP()
    	smtpObj.connect(mail_host, 25) # 25为SMTP端口号
    	smtpObj.login(mail_user, mail_pass) #会返回(状态码, "字符串解释")元组信息
    	smtpObj.sendmail(sender, receivers, message.as_string())
    	print("邮件发送成功")
    except smtplib.SMTPException:
    	print("Error: 无法发送邮件")
    
    """
    <smtplib.SMTP object at 0x000001ED3DDFCE48>
    邮件发送成功
    [Finished in 2.9s] 
    大家可以在QQ邮箱上设置中账号菜单设置开启STMP服务,然后获得口令,填入mail_pass,这里我就用xxxx表示口令,可以看到邮件发送成功 
    注: sender和mail_user要相同,可能QQSTMP服务器需要知道真实的发送者,所以就这样
    """

    发送带附件的邮件

    sendAttachmentmail.py

    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    
    # 第三方SMTP服务
    mail_host = "smtp.qq.com" # 设置服务器
    #自己的邮箱,通过QQ邮箱设置获取口令
    mail_user = "xxxxxxxxxxxx@qq.com" #用户名
    mail_pass = "xxxxxxxxxxxx" # 口令
    
    #这里sender和mail_user要一致,腾讯可能不让匿名发送邮件
    sender = 'xxxxxxxxxxxx@qq.com'
    receivers = ['xxxxxxx@qq.com'] #接受者的邮箱
    
    # 创建一个带附件的实例
    message = MIMEMultipart()
    message['From'] = Header("发送邮件者Clarence", 'utf-8')
    message['To'] = Header("xxxxxxxxxxxxxxxxx@qq.com", 'utf-8')
    subject = 'Python SMTP  邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
    
    # 邮件正文内容
    message.attach(MIMEText('这是smtp协议发送邮件测试有效负载内容....', 'plain', 'utf-8'))
    
    # 构造附件1,传送当前目录下的test.txt文件,可以看出是直接读取文本二进制流
    attr1 = MIMEText(open('test1.txt', 'rb').read(), 'base64', 'utf-8') 
    """
    上行代码作用
    Content-Type: text/base64; charset="utf-8"
    MIME-Version: 1.0
    Content-Transfer-Encoding: base64
    """
    attr1["Content_Type"] = 'application/octet-stream' # 内容是二进制流,不知道文件类型
    # 
    attr1["Content-Disposition"] = 'attachment; filename="send1.txt"' #Content-Disposition是MIME协议的扩展,支持MIME用户代理如何显示附加的文件
    message.attach(attr1)
    
    #构造附件2,传送当前目录下的test2.txt文件
    attr2 = MIMEText(open('test2.txt', 'rb').read(), 'base64', 'utf-8')
    attr2["Content_Type"] = 'application/octet-stream' 
    attr2['Content-Disposition'] = 'attachment; filename="send2.txt'
    message.attach(attr2)
    
    try:
    	smtpObj = smtplib.SMTP()
    	smtpObj.connect(mail_host, 25) # 25为SMTP端口号
    	smtpObj.login(mail_user, mail_pass) #会返回(状态码, "字符串解释")元组信息
    	smtpObj.sendmail(sender, receivers, message.as_string())
    	print(message)
    	print("邮件发送成功")
    except smtplib.SMTPException:
    	print("Error: 无法发送邮件")

     

     

    发送html且带图像

    IncoToHtml.py

    """
    在HTML文本中添加图片
    """
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.image import MIMEImage
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
    
    # 第三方SMTP服务
    mail_host = "smtp.qq.com" # 设置服务器
    #自己的邮箱,通过QQ邮箱设置获取口令
    mail_user = "xxxxx@qq.com" #用户名
    mail_pass = "xxxxxx" # 口令
    
    sender = 'xxxxx@qq.com'
    receivers = ['xxxxxxxxxxxxx@qq.com'] #接受者的邮箱
    
    # 创建一个带附件的实例
    message = MIMEMultipart('related')
    message['From'] = Header("发送邮件者Clarence", 'utf-8')
    message['To'] = Header("xxxxxxxxxxxxxxxxx@qq.com", 'utf-8')
    subject = 'Python SMTP  邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
    
    msgAlternative = MIMEMultipart('alternative')
    message.attach(msgAlternative)
    
    mail_msg = """
    <p>Python 邮件发送测试...</p>
    <p><a href="https://deeplearning4j.org/">深度学习java框架链接</a></p>
    <p>图片演示: </p>
    <p><img src="cid:image1"></p>
    """
    msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))
    # 指定图片为当前目录下test.png
    fp = open('test.png', 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()
    
    # 定义图片ID, 在HTML文本中引用
    msgImage.add_header('Content-ID', '<image1>')
    message.attach(msgImage)
    
    try:
    	smtpObj = smtplib.SMTP()
    	smtpObj.connect(mail_host, 25) # 25为SMTP端口号
    	smtpObj.login(mail_user, mail_pass) #会返回(状态码, "字符串解释")元组信息
    	smtpObj.sendmail(sender, receivers, message.as_string())
    	print(message)
    	print("邮件发送成功")
    except smtplib.SMTPException:
    	print("Error: 无法发送邮件")

     

    好,大家可以去我github查看项目,谢谢大家了https://github.com/youaresherlock

     

    展开全文
  • 基于JavaMail的Java邮件发送:复杂邮件发送

    万次阅读 多人点赞 2016-06-20 23:11:52
    上一篇文章 基于 JavaMail 的 Java 邮件发送:简单邮件发送 讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。 一封复杂的邮件内容...

    本文链接: https://blog.csdn.net/xietansheng/article/details/51722660

    上一篇文章 基于 JavaMail 的 Java 邮件发送:简单邮件发送 讲解了邮件的基本协议,JavaMail组件,创建并发送一封简单邮件的详细步骤。本文将介绍如何创建并发送一封包含图片和附件的复杂邮件。

    一封复杂的邮件内容可以看做是由很多节点(或者可以说是“片段”/“部分”/“零件”)组成,文本、图片、附件等都可以看成是邮件内容中的一个节点。这些节点之间又可以相互关联组合成一个节点。最终组合成一个大节点就是邮件的正文内容。

    完整代码演示:

    package com.xiets.javamaildemo;
    
    import java.util.Date;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.mail.Message.RecipientType;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility;
    
    /**
     * 创建并发送一封包含文本、图片、附件的复杂邮件
     * 
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     * 
     * @author xietansheng
     */
    public class Main {
    
        // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
        public static String myEmailAccount = "xxxxxxxx@163.com";
        public static String myEmailPassword = "xxxxxxxx";
    
        // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般格式为: smtp.xxx.com
        // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
        public static String myEmailSMTPHost = "smtp.163.com";
    
        // 收件人邮箱(替换为自己知道的有效邮箱)
        public static String receiveMailAccount = "xxxxxxxxx@qq.com";
    
        public static void main(String[] args) throws Exception {
            // 1. 创建参数配置, 用于连接邮件服务器的参数配置
            Properties props = new Properties();                    // 参数配置
            props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)
            props.setProperty("mail.smtp.host", myEmailSMTPHost);   // 发件人的邮箱的 SMTP 服务器地址
            props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
            
            // 开启 SSL 连接, 以及更详细的发送步骤请看上一篇: 基于 JavaMail 的 Java 邮件发送:简单邮件发送
    
            // 2. 根据配置创建会话对象, 用于和邮件服务器交互
            Session session = Session.getInstance(props);
            session.setDebug(true);                                 // 设置为debug模式, 可以查看详细的发送 log
    
            // 3. 创建一封邮件
            MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
    
            // 也可以保持到本地查看
            // message.writeTo(file_out_put_stream);
    
            // 4. 根据 Session 获取邮件传输对象
            Transport transport = session.getTransport();
    
            // 5. 使用 邮箱账号 和 密码 连接邮件服务器
            //    这里认证的邮箱必须与 message 中的发件人邮箱一致,否则报错
            transport.connect(myEmailAccount, myEmailPassword);
    
            // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
            transport.sendMessage(message, message.getAllRecipients());
    
            // 7. 关闭连接
            transport.close();
        }
    
        /**
         * 创建一封复杂邮件(文本+图片+附件)
         */
        public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
            // 1. 创建邮件对象
            MimeMessage message = new MimeMessage(session);
    
            // 2. From: 发件人
            message.setFrom(new InternetAddress(sendMail, "我的测试邮件_发件人昵称", "UTF-8"));
    
            // 3. To: 收件人(可以增加多个收件人、抄送、密送)
            message.addRecipient(RecipientType.TO, new InternetAddress(receiveMail, "我的测试邮件_收件人昵称", "UTF-8"));
    
            // 4. Subject: 邮件主题
            message.setSubject("TEST邮件主题(文本+图片+附件)", "UTF-8");
    
            /*
             * 下面是邮件内容的创建:
             */
    
            // 5. 创建图片“节点”
            MimeBodyPart image = new MimeBodyPart();
            DataHandler dh = new DataHandler(new FileDataSource("FairyTail.jpg")); // 读取本地文件
            image.setDataHandler(dh);		            // 将图片数据添加到“节点”
            image.setContentID("image_fairy_tail");	    // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
    
            // 6. 创建文本“节点”
            MimeBodyPart text = new MimeBodyPart();
            //    这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
            text.setContent("这是一张图片<br/><img src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8");
    
            // 7. (文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)
            MimeMultipart mm_text_image = new MimeMultipart();
            mm_text_image.addBodyPart(text);
            mm_text_image.addBodyPart(image);
            mm_text_image.setSubType("related");	// 关联关系
    
            // 8. 将 文本+图片 的混合“节点”封装成一个普通“节点”
            //    最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart,
            //    上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart
            MimeBodyPart text_image = new MimeBodyPart();
            text_image.setContent(mm_text_image);
    
            // 9. 创建附件“节点”
            MimeBodyPart attachment = new MimeBodyPart();
            DataHandler dh2 = new DataHandler(new FileDataSource("妖精的尾巴目录.doc"));  // 读取本地文件
            attachment.setDataHandler(dh2);			                                    // 将附件数据添加到“节点”
            attachment.setFileName(MimeUtility.encodeText(dh2.getName()));	            // 设置附件的文件名(需要编码)
    
            // 10. 设置(文本+图片)和 附件 的关系(合成一个大的混合“节点” / Multipart )
            MimeMultipart mm = new MimeMultipart();
            mm.addBodyPart(text_image);
            mm.addBodyPart(attachment);		// 如果有多个附件,可以创建多个多次添加
            mm.setSubType("mixed");			// 混合关系
    
            // 11. 设置整个邮件的关系(将最终的混合“节点”作为邮件的内容添加到邮件对象)
            message.setContent(mm);
    
            // 12. 设置发件时间
            message.setSentDate(new Date());
    
            // 13. 保存上面的所有设置
            message.saveChanges();
    
            return message;
        }
    
    }
    

    发送后查看收件人的收件箱:

    sended-email.png


    展开全文
  • Python Socket编程:发送MIME协议邮件

    千次阅读 2016-12-07 16:31:05
    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个...
  • Java实现邮件发送

    万次阅读 多人点赞 2019-07-20 16:03:19
    Java实现邮件发送 一、邮件服务器与传输协议 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱...
  • java使用smtp协议发送邮件注意的问题

    万次阅读 2018-05-09 18:03:15
    公司经常遇到发送邮件的问题,普通邮件发送就不说了,说一下无账号密码发送邮件的过程,在这里总结一下: 邮件收发协议:发送邮件使用smtp协议,收取邮件使用pop或imap协议;这里我们只讲发送邮件的smtp协议; ...
  • SMTP全称是简单邮件传输协议,它专门用来发送邮件用的。Pop全称是邮局协议,是专门用于接收邮件的。我主要是负责如何实现发送邮件功能的。MailSend命名空间是我整个程序的核心。它包括两个类。在SmtpMail的类中包含...
  • #发送方的邮箱账号 ...#使用的协议(JavaMail规范要求) mail.transport.protocol=smtp #发件人的邮箱的 SMTP 服务器地址 mail.smtp.host=smtp.sina.cn #需要请求认证 mail.smtp.auth=true #某...
  • 我们使用邮件一般是使用邮件客户端,比如,Thunderbird,Foxmail,Microsoft Outlook等等,使用的时候需要设置STMP发送服务器,POP3或者IMAP接收服务器这样给我们的印象似乎是STMP是发送协议,POP3或者IMAP是接收协议。...
  • 一、 邮件开发涉及到的一些基本概念 1.1、邮件服务器和电子邮箱  要在Internet上提供电子邮件功能,...例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己的邮件服务器。  这些邮件...
  • 简单邮件传输协议SMTP

    千次阅读 2016-09-19 14:02:42
    很多应用都需要发送邮件的功能。在PHP中自带一个mail()函数,但如果想通过mail()函数发送邮件,必须先安装SMTP服务器。如果不想安装SMTP邮件服务器,却想发送邮件,这时,Socket就派上用场了。可以使用Socket连接一...
  • 邮件协议

    千次阅读 2020-06-20 17:12:38
    SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转邮件时找到下一个目的地。 SMTP服务器就是遵循了SMTP协议发送邮件服务器。 SMTP认证,就是要求必须在提供了账户名和密码之后才可以登陆SMTP服务器,这就...
  • SMTP系列之邮件发送功能JavaEE实现

    千次阅读 多人点赞 2016-12-26 17:22:28
    本博客介绍基于SSM框架(Spring4.0+SpringMVC+Mybatis)组合的Javamail应用,邮箱的话基于腾讯的QQ邮箱,其实也是Foxmail邮箱先要了解一下SMTP协议和...SMTP是一种请求响应的协议,也就是客户机向远程服务器发送请求,服
  • c++使用stmp协议发送邮件(163的邮箱,TTL非SSL)

    万次阅读 热门讨论 2014-07-04 09:43:29
    c++使用stmp协议发送邮件(163的邮箱,TTL非SSL)
  • Java邮件发送详解

    万次阅读 多人点赞 2019-07-19 13:37:34
    电子邮件 要在网络上实现邮件功能,必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址:一般是 smtp....
  • 发送邮件代码

    2013-07-07 09:13:47
    发送邮件邮件前,需要理解SMTP(Simple Mail Transfer Protocol)。SMTP是电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本...
  • PHP利用Socket发送HTTP协议和SMTP协议

    千次阅读 2018-06-21 15:16:55
    学习背景 ...邮件发送原理 在了解如何使用PHP发送原理之前,先了解邮件发送和接受的原理。 1.1 邮件服务器和邮件传输协议 要在Internet上发送邮件,那么必须使用专门的电子邮件服务器(mail s...
  • SpringBoot中发送QQ邮件

    千次阅读 2018-03-09 10:55:24
    本文是vhr系列的第十二篇,项目地址https://github.com/lenve/vhr 邮件发送也是一个老生常谈的问题了,代码虽然简单,但是许多小伙伴对过程不太理解,所以还是打算和各位小伙伴聊聊这个话题。 邮件协议我们经常会...
  • 利用java实现发送邮件

    万次阅读 多人点赞 2017-11-14 15:01:31
    很显然这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。电子邮件协议 电子邮件在网络中传输和网页...
  • 邮件发送程序(添加附件发送)

    千次阅读 2018-09-08 17:18:50
    (涉及的知识点:文件上传+邮件发送) 知识点引入: 文件上传:开发的Web应用是基于HTTP协议的,工作在Request/Response模式下。在这种模式下,用户通过浏览器访问Web应用中的内容,都会先通过浏览器给服务器发送...
  • Windows命令实现匿名邮件发送

    千次阅读 2015-04-23 03:09:27
    在一些高级语言中,如Python,C#中,都有专门的邮件发送模块,如Python 中的 smtplib 模块。那么,一封邮件到底是如何发送到一个特定的邮箱呢? 举个例子:使用test@163.com 发送一封邮件到 test@qq.com...
  • Java 实现QQ邮件发送过程

    千次阅读 2016-11-21 11:14:04
    一:首先要了解邮件发送的一些基本概念: 1.1、邮件服务器和电子邮箱  要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sina、sohu、163等等他们都有自己...
  • Laravel5.0+ 邮件发送功能实现

    千次阅读 2017-09-02 11:40:47
    背景 近期在接触传说中最优雅的 PHP 框架——Laravel,学习了一下邮件发送功能,在此分享一下,其中,我使用的框架版本为 5.2.45,参考时请...对于 ThinkPHP 框架框架的邮件发送可参考文章 ThinkPHP 框架下邮件发送功能
  • java实现邮件发送功能

    千次阅读 2017-10-29 11:49:53
    一个简单的小例子实现邮件发送 如下图: 输入要发送的邮件地址以及发送的邮件内容,点击按钮,发送邮件,完成即可跳到如下页面: 项目结构 如图: 详细代码介绍 1.按照项目结构建立项目并新建文件 2.导入发送...
  • Python实现邮件发送,钉钉机器人

    千次阅读 2019-07-17 18:49:31
    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,使用TCP协议25端口 它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式 python的smtplib提供了一种很方便的途径发送电子邮件。它对...
  • 邮件发送的原理

    千次阅读 2017-01-04 23:51:07
    当你发送一封邮件的时候,它首先会发送到收件人的邮件服务器上,并放入收件人的信箱中。(如果你在某一个邮件服务器提供商那里申请了一个邮箱账号,那么你在这个邮件服务器上面就有一个电子信箱)。收件人只需要定时...
  • 邮件传输协议SMTP

    千次阅读 2019-06-03 19:56:25
    邮件传输协议 邮件传输过程 SMTP简单邮件传输协议 SMTP 使用客户/服务器...SMTP协议是基于文本的协议,通过SMTP发送的电子邮件都是普通文本格式的,不支持声音、图像等非文本信息,但可以通过MIME标准将此类信息进...
  • JavaMail发送和接收邮件

    万次阅读 多人点赞 2009-03-09 10:40:00
    一、JavaMail概述: JavaMail是由Sun定义的一套收发电子邮件的... 厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:l SMTP:简单邮件传输协议,用于发送电子邮件的传输协议;l P

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,174
精华内容 39,669
关键字:

处理邮件发送请求的协议是