精华内容
下载资源
问答
  • 得到邮件发送时间
    更多相关内容
  • 今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如果没有错误...
  • java邮件发送

    千次阅读 2022-04-06 16:18:16
    JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail ...

    一、JavaMail介绍
    1、概述

    JavaMail是利用现有的邮件账户发送邮件的工具,比如我在网易注册一个邮箱账户,通过JavaMail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件。这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。

    JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。

    SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件的传输协议
    POP3(Post Office Protocol - Version 3):用于接收电子邮件的标准协议
    IMAP(Internet Mail Access Protocol):互联网消息协议,是POP3的替代协议

    JavaMail下载(javax.mail-1.6.0.jar):JavaMail API

    2、JavaMail API

    JavaMail API 按照功能可以划分为如下三大类:

      ①、创建和解析邮件的API

      ②、发送邮件的API

      ③、接收邮件的API

      以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核心类,我们在编写程序时,记住这四个核心类,就很容易编写出Java邮件处理程序。

    ①Message 类:javax.mail.Message 类是创建和解析邮件的核心 API,这是一个抽象类,通常使用它的子类javax.mail.internet.MimeMessage 类。它的实例对象表示一份电子邮件。客户端程序发送邮件时,首先使用创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类) 发送。客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使用邮件解析API从这个对象中解析收到的邮件数据。

    ②Transport 类:javax.mail.Transport 类是发送邮件的核心API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好 Message 对象后,只需要使用邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调用它的发送方法,就可以把邮件发送给指定的 SMTP 服务器。

    ③Store 类:javax.mail.Store 类是接收邮件的核心 API 类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如 POP3 协议,客户端程序接收邮件时,只需要使用邮件接收 API 得到 Store 对象,然后调用 Store 对象的接收方法,就可以从指定的 POP3 服务器获得邮件数据,并把这些邮件数据封装到表示邮件的 Message 对象中。

    ④Session 类:javax.mail.Session 类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,例如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session 对象根据这些信息构建用于邮件收发的 Transport 和 Store 对象,以及为客户端创建 Message 对象时提供信息支持。

    二、基于JavaMail的简单邮件发送

    1、准备工作
    (1)新建java项目,将下载的javax.mail-1.6.0添加进项目

     (2)准备好邮箱授权码,授权密码不是邮箱密码,邮箱授权密码要自己去申请,具体百度!

    2、邮件创建步骤

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

    3、简单邮件发送主程序
    以下代码需要修改成自己对应的发送人邮箱地址、授权码、收件人邮箱地址。

    import java.util.Date;
    import java.util.Properties;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    /**
     * JavaMail 版本: 1.6.0
     * JDK 版本: JDK 1.7 以上(必须)
     */
    public class sendEmail{
        //发件人的邮箱和密码(替换为自己的邮箱和密码)
        //PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”),
        //对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
        public static String myEmailAccount = "xxx@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 = "xxx@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());
            System.out.println("邮件发送成功");
            // 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;
        }
    }

    结果:

    三、基于JavaMail的复杂邮件发送(包含图片、附件等)

    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 SendMail{
        //发件人的邮箱和密码(替换为自己的邮箱和密码)
        public static String myEmailAccount = "xxx@163.com";
        public static String myEmailPassword = "XXXXXXXXXX";
    
        //发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般格式为: smtp.xxx.com
        //网易163邮箱的 SMTP 服务器地址为: smtp.163.com
        public static String myEmailSMTPHost = "smtp.163.com";
    
        //收件人邮箱(替换为自己知道的有效邮箱)
        public static String receiveMailAccount = "xxx@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的简单邮件发送注释部分
    
            //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());
    
            System.out.println("邮件发送成功!");
    
            //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("E:\\guigu\\test\\src\\mail\\picture.png")); //读取本地文件
            image.setDataHandler(dh);		            // 将图片数据添加到“节点”
            image.setContentID("image_picture");	    // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
    
            //6.创建文本“节点”
            MimeBodyPart text = new MimeBodyPart();
            //    这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
            text.setContent("这是一张图片<br/><img src='cid:image_picture'/>", "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("E:\\guigu\\test\\src\\mail\\word1.docx"));  //读取本地文件
            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;
        }
    
    }
    

    结果:

    四、基于SpringBoot框架发送邮件

    1、在工程的pom.xml中导入SpringBoot整合JavaMail的坐标

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    2、在application.yml文件中配置JavaMail

    password处填写授权码,不是邮箱登录密码。

     3、编写功能类
    (1)SendMailServiceImpl实现简单邮件发送

    import com.itheima.service.SendMailService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Service;
    
    @Service
    public class SendMailServiceImpl implements SendMailService {
        @Autowired
        private JavaMailSender javaMailSender;
        //发送人
        private String from = "xxx@163.com";
        //接收人
        private String to = "xxx@qq.com";
        //标题
        private String subject = "测试邮件";
        //正文
        private String context = "测试邮件正文内容";
        @Override
        public void sendMail() {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(from+"(小甜甜)");
            message.setTo(to);
            message.setSubject(subject);
            message.setText(context);
            javaMailSender.send(message);
        }
    }
    

    在测试类中运行
     

    import com.itheima.service.SendMailService;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    
    @SpringBootTest
    class Springboot23MailApplicationTests {
    
        @Autowired
        private SendMailService sendMailService;
    
        @Test
        void contextLoads() {
            sendMailService.sendMail();
        }
    }

    结果:

    (2)SendMailServiceImpl2实现复杂邮件发送

    import com.itheima.service.SendMailService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;
    import org.springframework.stereotype.Service;
    import javax.mail.internet.MimeMessage;
    import java.io.File;
    
    @Service
    public class SendMailServiceImpl2 implements SendMailService {
        @Autowired
        private JavaMailSender javaMailSender;
        //发送人
        private String from = "xxx@163.com";
        //接收人
        private String to = "xxx@qq.com";
        //标题
        private String subject = "测试邮件";
        //正文
        private String context = "<img src='https://img-blog.csdnimg.cn/8774575ed57d48159111f8f505235f89.png?x-oss-process=image/resize,m_fixed,h_300,image/format,png'/><a href='https://www.baidu.com/'>点开有惊喜</a>";
    
        @Override
        public void sendMail() {
            try {
                MimeMessage message = javaMailSender.createMimeMessage();
                MimeMessageHelper helper = new MimeMessageHelper(message,true);
                helper.setFrom(from +"(小甜甜)");
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(context,true);
    
                //添加附件
                File f1 = new File("E:\\guigu\\springbooot\\springboot_23_mail\\target\\classes\\logo.png");
                File f2 = new File("E:\\guigu\\test\\src\\mail\\word1.docx");
    
                helper.addAttachment(f1.getName(),f1);
                helper.addAttachment("最靠谱的培训结构.png",f2);
    
                javaMailSender.send(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    结果:

    参考链接:

    1、邮件实现详解(四)------JavaMail 发送(带图片和附件)和接收邮件 - YSOcean - 博客园

    2、基于JavaMail的Java邮件发送:简单邮件发送_xietansheng的博客-CSDN博客_javamail

    3、基于JavaMail的Java邮件发送:复杂邮件发送_xietansheng的博客-CSDN博客_java发送邮件

    展开全文
  • 「预约安排发送邮件」这个功能虽然不是人人都用得到,但是对于上班族而言,预约安排发送邮件的功能非常好用,利用 GmAIl 其实就可以完成预约安排发送邮件的功能,小编跟大家聊聊使用 GmAIl 的网页版以及使用 Mac ...

    「预约安排发送邮件」这个功能虽然不是人人都用得到,但是对于上班族而言,预约安排发送邮件的功能非常好用,利用 GmAIl 其实就可以完成预约安排发送邮件的功能,小编跟大家聊聊使用 GmAIl 的网页版以及使用 Mac 做到预约安排发送邮件的方法。

    为什么需要「预约安排发送邮件」?

    「预约安排发送邮件」功能好用的地方在于,有的时候我们可能临时想到什么想要通知别人、或是晚上整理好了报告要寄给主管或同事,但是又觉得太晚了怕会打扰到别人,尤其现在很多人会用手机收信,有新的信件就会跳出通知。

    虽然说我们发送邮件后,对方即使手机上跳出通知也可以选择不要看,但有些事情真的不是那么紧急的话,我就会选择隔天上班时间再寄出,留给对方一个完全不工作打扰的下班时间。

    当然,其他一定还有很多原因或是私人考量,必须要在特定的时间才能够把信出,这时预约安排发送邮件的功能就相当好用。

    利用 GmAIl 预约安排发送邮件

    用 GmAIl 网页版预约安排发送邮件。

    其实很多人爱用的 GmAIl 就有「预约安排发送邮件」的功能,我们只要在编辑完邮件内容后,不要直接按「发送」,而是选择「传送」旁边的箭头,打开选项后,点选「安排发送时间」。

    然后选择你预计要将这封信寄出的时间,最后画面就会显示这封信最终的预约安排寄信时间给你确认。

    这样我们就完成利用 GmAIl 预约安排发送邮件的作业了,对方也会在我们所预约安排发送邮件的时间后,收到这封邮件。

    利用第三方邮件软件预约安排发送邮件

    Mac 原生的 MAIl App 并没有提供预约安排发送邮件的功能,如果不想要开启览器就完成收信、寄信,甚至是预约安排发送邮件的功能,可以使用第三方 App,其中 Spark 这套 App 就很好用。

    Spark  这套 App 是一款整合式的邮件管理工具,可以帮你整合不同的 EmAIl 帐号在同一个 App 中。还提供邮件智慧分类的功能,自动帮你将不同类型的邮件分门别类显示出来。已读的邮件会另外有一区存放,永远显示最新的内容给你看,但是旧的内容也会保留下来。

    而 Spark 就有提供预约安排发送邮件的功能,只要在撰写 MAIl 之后,点选下方预约安排发送邮件的按钮,就可以安排想要的时间寄出邮件。

    注意:Spark 必须要在 App 开启并且连线的状态下才能够顺利的将安排的邮件寄出。

    展开全文
  • Java邮件发送

    2014-12-25 09:40:46
    26. * 获得邮件会话属性 27. */ 28. public Properties getProperties(){ 29. Properties p = new Properties(); 30. p.put("mail.smtp.host", this.mailServerHost); 31. p.put("mail.smtp.port", this....
  • 使用python进行邮件发送

    千次阅读 多人点赞 2022-02-04 13:40:15
    发送邮件和退出邮箱三.定时发送四.效果 前言 如果你和我一样偶尔看看股票,看看自己关注的股票是涨了还是跌了,或者想快速获取到想看的头条新闻,我们不必把过多的注意力放在去寻找上面,我们只需要让爬虫程序每天...

    前言

    如果你和我一样偶尔看看股票,看看自己关注的股票是涨了还是跌了,或者想快速获取到想看的头条新闻,我们不必把过多的注意力放在去寻找上面,我们只需要让爬虫程序每天自动为你发送你想要了解的信息就可以了,这样就能掌控我们的注意力,更好的去享受生活。

    一.分析爬取目标

    这里就不爬取股票的信息,我来爬一个天气预报的信息,然后实现每天定时发送。打开下面的链接就能跳转到中国气象网
    http://www.weather.com.cnnn/
    在这里插入图片描述
    点击温度那个位置就可以进入下面的图
    在这里插入图片描述
    我们可以看到7天的天气和8-15天的天气,再往后对我们来说就没必要了。我们查看七日的天气预报,直接爬11日的天气,鼠标右键->检查->Network->刷新网页->查看列表第一个,再点击preview
    在这里插入图片描述
    可以看到数据在HTML里面,然后回到element
    在这里插入图片描述
    可以发现,温度数据放在<p class="tem">之下。“多云”所在的位置是<p title="晴" class="wea">晴</p>

    在这里插入图片描述

    import requests
    
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'}
    
    # 封装headers
    #这里对应的是我选的城市,可以换自己所在城市
    url = 'http://www.weather.com.cn/weather/101010100.shtml'
    
    # 把URL链接赋值到变量url上
    
    res = requests.get(url, headers=headers)
    
    # 发送requests请求,并把响应的内容赋值到变量res中。
    
    print(res.text)
    
    # 打印出res对象的网页源代码
    
    print(res.status_code)
    
    # 检查响应状态是否正常
    
    

    看结果可以看到是响应是正常的,但是出现了乱码。但是莫慌。加上一句res.encoding='utf-8'就行了。
    在这里插入图片描述
    接下来就可以写完整的爬取信息的代码了

    import requests
    
    from bs4 import BeautifulSoup
    
    
    
    headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'}
    
    #封装headers
    
    url='http://www.weather.com.cn/weather/101010100.shtml'
    
    #把URL链接赋值到变量url上
    
    res=requests.get(url,headers=headers)
    
    #发送requests请求,并把响应的内容赋值到变量res中
    
    res.encoding='utf-8'
    
    
    
    bsdata=BeautifulSoup(res.text,'html.parser')
    
    #使用bs模块解析获取到的数据
    
    data_temperature= bsdata.find(class_='tem')
    
    #使用find()取出天气的温度数据
    
    data_weather= bsdata.find(class_='wea')
    
    #使用find()取出天气的文字描述
    
    print(data_temperature.text)
    
    #取出变量data_temperature中的字符串内容,并打印
    
    print(data_weather.text)
    
    #取出变量data_weather中的字符串内容,并打印
    

    可以成功的得到需要的数据。
    在这里插入图片描述


    其实最难的不是爬虫,爬这种信息新手应该都会,接下里才是重头戏。

    二.信息的发送

    如果我们想要实现发送邮件,这里以qq邮件为例要经过以下的步骤:

    1. 连接邮件服务器
    2. 使用邮箱账号密码登录
    3. 填写收件人,主题,正文等
    4. 发送邮件

    所以连接服务器要用到用到smtplib库,填写主题和撰写正文,需要用到email库(python真的是yyds)

    1.连接服务器

    SMTP代表简单邮件传输协议,相当于一种计算机之间发邮件的约定

    smtplib是不需要安装的,smtplib是python的一个内置库,有兴趣的小伙伴可以看看官方文档
    https://docs.python.org/3.8/library/smtplib.html

    看下面的代码

    import smtplib
    
    mailhost='smtp.qq.com'
    
    #把qq邮箱的服务器地址赋值到变量mailhost上,地址需要是字符串的格式。
    
    qqmail = smtplib.SMTP()
    
    #实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
    
    qqmail.connect(mailhost,25)
    
    #连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号
    

    **mailhost=‘smtp.qq.com’**这句是qq邮箱的服务器地址,这个是可以查得到的

    用SMTP对象的connect()方法连接服务器,第一个参数是获取到的服务器地址,第二个参数是SMTP端口号——25。端口号的选择不是唯一的,但是25是一个最简单、最基础的端口号,所以我们填25。

    2.获取账号和密码

    此密码非彼密码,这个密码需要我们去到这里获取:https://mail.qq.com/,登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户设置】。
    在这里插入图片描述
    下拉到这个位置
    在这里插入图片描述
    点击开启第一个,然后得到授权码,如果以前获取过但是忘了,就需要发送短信重新获取,这个码一定不要外漏!!!
    在这里插入图片描述

    import smtplib
    
    mailhost='smtp.qq.com'
    #把qq邮箱的服务器地址赋值到变量mailhost上
    
    qqmail = smtplib.SMTP()
    #实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
    
    qqmail.connect(mailhost,25)
    #连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。
    
    sender = input('请输入你的邮箱:')
    #获取邮箱账号
    
    password = input('请输入你的密码:')
    #获取邮箱密码
    
    qqmail.login(sender,password)
    #登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码
    
    receiver=input('请输入收件人的邮箱:')
    #获取收件人的邮箱
    

    所填密码就是刚才获取的授权码

    3.主题和正文

    在这里就需要用到email库。

    from email.mime.text import MIMEText
    
    from email.header import Header
    
    content=input('请输入邮件正文:')
    
    #输入你的邮件正文
    
    message = MIMEText(content, 'plain', 'utf-8')
    
    #实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码
    
    subject = input('请输入你的邮件主题:')
    
    #用input()获取邮件主题  
    
    message['Subject'] = Header(subject, 'utf-8')
    
    

    我们还需要引入了email库中的MIMEText模块和Header模块
    最后一行代码:在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message[‘Subject’],message[‘Subject’]就代表着根据MIMEText类里面的Subject的属性名取到该属性

    代码有注释还不明白的话可以去看看文档,

    4.发送邮件和退出邮箱

    将前面的代码整合以下

    
    from email.mime.text import MIMEText
    
    from email.header import Header
    
    #引入Header和MIMEText模块
    
    content=input('请输入邮件正文:')
    
    #输入你的邮件正文
    
    message = MIMEText(content, 'plain', 'utf-8')
    
    #实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码
    
    subject = input('请输入你的邮件主题:')
    
    #用input()获取邮件主题
    
    message['Subject'] = Header(subject, 'utf-8')
    
    qqmail.sendmail(sender, receiver, message.as_string())
    
    qqmail.quit()
    
    #退出邮箱
    

    sendmail() 发送邮件,括号里面有三个参数,第1个是发件人的邮箱地址,第2个是收件人的邮箱地址,第3个是正文,但必须是字符串格式,所以用as_string()函数转换了一下。

    但是我们希望发送成功后能显示“邮件发送成功”,失败的时候能提示我们“邮件发送失败”,可以使用try语句来实现。

    try:
    
        qqmail.sendmail(sender, receiver, message.as_string())
    
        print ('邮件发送成功')
    
    except:
    
        print ('邮件发送失败')
    
    qqmail.quit()
    

    三.定时发送

    关于时间,其实Python有两个内置的标准库——time和datetime,但是我们不用,诶,就是玩,我们可以用第三方库schedule其实是有原因的:对于我们需要的定时功能,time和datetime当然能实现,但操作逻辑会相对复杂;而schedule就是可以直接解决定时功能,代码比较简单,这是我们选择schedule的原因。
    官方文档链接:https://pypi.org/project/schedule/
    根据文档我们做一个每3秒运行一次的程序

    import schedule
    
    import time
    
    #引入schedule和time模块
    
    def job():
    
        print("Working in progress...")
    
    #定义一个叫job的函数,函数的功能是打印'I'm working...'
    
    schedule.every(3).seconds.do(job)        
    
    while True:
    
        schedule.run_pending()
    
        time.sleep(1)
    

    也可以设置在某个时间发送,用法很多,这里就不展开。最后把这些代码全部合并整合一下,下面看效果

    四.效果

    在这里插入图片描述
    这里我定的下午三点四十六,然后发送成功,我打开我的邮箱确实能收到
    在这里插入图片描述
    这个功能我放在服务器上用了很久了,爬一些平时自己必看的信息,然后发送,减少了自己被其他东西吸引注意力的几率。


    这篇文章不在于爬取天气信息这块,而是通过这种方式去实现定时发送邮件,只要用的好能为自己省下很多的时间和精力去在信息大海里面查找自己想要的信息。

    如果喜欢的话记得点个赞,懒得合并代码找我要,加我qq:2024810652,也可加群:785318982

    展开全文
  • 整个项目就是一个动态调用发送邮件的模版,包含设置动态触发时间的xml,设置邮件发送信息的xml,设置邮件显示的模版template.vm。 使用技术: 1 使用SchedulerFactoryBean+CronTriggerBean的Spring Quarter动态设置...
  • 邮件发送失败的原因和解决方法

    千次阅读 2021-07-31 05:22:41
    以下是对邮件发送失败 提示信息的解析: 1、提示信息:There are no DNS entries for the hostname, I cannot determine where to send this message. 退信原因:检索不到接收方域名的邮件解析(MX记录)和 2、提示...
  • Dns解析出的ip不通导致无法发送邮件 问题:搬入公司新址,使用一运营商的专线网络后(原来使用电信宽带),经常有同事反馈有时无法发送邮件,有时能成功。今天有同事反馈无法发邮件,但他的账号在别人pc使用上是...
  • SpringBoot 发送邮件和附件

    千次阅读 2019-01-22 16:29:41
    作者:yizhiwazi ... SpringBoot集成邮件服务竟如此简单,还等什么... SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。...
  • java实现读取邮件发送邮件

    千次阅读 2016-02-18 11:16:40
    有些邮箱pop服务器不支持查看是否邮件已经被查看多的功能,只能通过自己认为添加标识标记邮件是已读还是未读 public class MailUtil { /**   * 判断邮件中是否包含附件   * @param msg 邮件内容   ...
  • JAVA定时发送邮件接口

    2021-12-08 09:41:36
    } @Override public void run() { System.out.println("进入邮件发送"); SendMail sendMail = new SendMail(); sendMail.send(issueNoticeDTO); } } ​ public class SendMail { public void send(IssueNoticeDTO ...
  • ssm实现发送邮件功能

    千次阅读 2020-12-20 12:29:07
    SSM实现发送邮件项目需求前期工作配置文件及代码项目部署 项目需求 用户注册时输入自己的邮箱地址(这里以QQ邮箱为例),用户提交订单,管理员操作订单,订单审核通过时给用户发送邮件提醒用户,审核成功请尽快付款...
  • Java发送带图表邮件

    千次阅读 2020-05-30 16:01:31
    发送邮件的依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dependency> 实现的...
  • java 实现发送邮件(带附件)

    千次阅读 2022-05-17 19:41:00
    javax.mail实现发送WinMail Server邮件,并解决附件无法打开,附件内容乱码,且附件的存储位置为文件服务器无法获取FileDataSource("")问题
  • 邮件发送的协议:POP3,IMAP4、SMTP 2.邮箱的发送过程 简单来说,我们发邮件,或者接受别人发来的邮件IMAP4协议、SMTP协议帮我们实现。 我们需要取邮件,读邮件,拿右键都是POP3协议帮我们实现。 ...
  • 它为我节省了无数的时间和金钱,希望对您也有帮助。 我已经使用此脚本发送了演出文件。 您将文件拖放到表单上,添加收件人电子邮件,描述和主题行点击发送。 收件人将收到一个指向他可以下载的zip文件的链接。 繁荣...
  • 最近接手一个邮件发送的功能,这里记录下,供以后需要时查看或在次基础上优化开发 1.首先是添加springboot-mail的依赖包 <!--springboot-mail整合包--> <dependency> <groupId>org.spring...
  • [转]http://www.hi-office.cn/ricoh/maintenance/4987.html理光Aficio 3035复印机通过电子邮件发送扫描文件的设定方法及操作步骤作者:hioffice文章来源:本站原创点击数:2533更新时间:2009-12-7【字体:小大】...
  • 嗯,电子邮件很容易,但是却没有您想像的那么容易,特别是如果您希望从黑客的攻击中获得一定程度的隐私和安全性。 电子邮件脚本是安全敏感的。 特别是当与例如公共联系表格一起使用时,它不能提供安全的AUTH。 ...
  • Python 自动发送邮件详细教程

    千次阅读 2020-06-26 23:45:57
    自动发送邮件能应用于许多场景中,比如我想要知道股票策略中的股票池是否有实时的更新,这时候如果再拉一遍数据,跑一遍脚本,实在是太浪费时间了。为什么不把这一套流程放到服务器上,然后到点自动运行并发送邮件呢...
  • python 实现邮件批量发送(你懂得)

    千次阅读 2022-01-23 21:28:21
    python实现短信批量发送
  • 仅供参考部分方法,无法直接使用。 // 报表临时文件目录 public static final String WORK_FILES = excelTask... * 邮件定时发送excel报表 */ public void sendInfoExcel() { try { String nowTime = DateUtil.ge
  • Spring 邮件发送

    2020-10-21 15:36:29
    主要内容 JavaMail 概述 ​ JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。...SMTP:简单邮件传输协议,用于发送电子邮件的传输协议; POP3:用于接收电子邮件的标准协议; IMAP:
  • 发邮件时出现邮件发送失败,邮件连接超时的问题主要可能的原因是 你发送的邮件由于包含了过大的附件 超过了对方邮箱服务器的限制大小 这种情况尤其是在给国外邮件地址发送时容易出现我也遇到过 给一土耳其的邮件地址...
  • Java实现发送邮件并携带附件

    千次阅读 2021-08-31 16:26:11
    一、 邮件服务器与传输... 通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 POP3协议 通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。 .
  • Java网络编程:实现QQ邮件发送客户端

    千次阅读 多人点赞 2020-12-09 11:35:01
    本篇详细记录了使用Java网络编程的技术思想,初步实现QQ邮件发送客户端。从零开始学习,认识计算机网络邮件传输协议(SMTP、POP3),并开通QQ邮箱的smtp/pop3服务,为之后程序设计做准备,自行实现简单的Java GUI,...
  • 监听器和简单邮件发送

    千次阅读 2020-12-15 09:18:16
    } }` 二、发送邮件 1.生成四位验证码实例 `public class CodeUtils { public static void main(String[] args) { for (int i = 0; i ; i++) { CodeUtils.createCode(); } ​ ​ } public static String ...
  • 为了及时掌握采集系统的运行情况,我们简单开发了一个敏感值统计与邮件通知的程序。程序由两部分组成:一部分是敏感值统计,统计系统中的敏感值,比如采集的数据条数、新增的数据条数、各字段出现的次数等;一部分是...
  • 基本上,这些代码行可以将邮件发送给具有Selenium库的人员。 这样一来,您可以在短时间内一次发送这么多邮件; 这个示例项目背后的基本思想是找到您的朋友并以短邮寄给他们; 说明 Bot程序获取要写入的数组数据 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,845
精华内容 64,338
关键字:

得到邮件发送时间