精华内容
下载资源
问答
  • 怎样修改邮件时间
    2020-11-29 13:56:49

    在GMail中查看电子邮件时,当显示电子邮件发送的日期和时间时,将使用您的本地时区。“周二,2012年8月28日02:49:13-0500”将被解析,然后更新到本地时区,并以特定于GMail的方式格式化。

    解析和格式化stdlib方式

    email.utils模块包含一个^{} function,专门处理带有时区偏移的电子邮件头。

    它返回与^{}兼容的元组,但添加了时区偏移量。另一个^{} function将该元组转换为偏移值(自UNIX纪元以来的秒数)。然后可以很容易地将该值转换为datetime.datetime()类型的对象。

    同一模块还有一个^{} function来将UNIX epoch时间戳转换为与电子邮件兼容的日期字符串:>>> from email.utils import parsedate_tz, mktime_tz, formatdate

    >>> import time

    >>> date = 'Tue, 28 Aug 2012 02:49:13 -0500'

    >>> tt = parsedate_tz(date)

    >>> timestamp = mktime_tz(tt)

    >>> print formatdate(timestamp)

    Tue, 28 Aug 2012 07:49:13 -0000

    现在,我们有一个格式的日期在UTC适合发送电子邮件。要将此打印为mylocal时区(由我的计算机决定),您需要将localtime标志设置为True:>>> print formatdate(timestamp, True)

    Tue, 28 Aug 2012 08:49:13 +0100

    使用更好的工具分析和格式化

    请注意,当我们尝试处理时区时,事情变得越来越棘手,而formatdate()函数并没有给您提供任何选项来设置稍微不同的格式(就像GMail一样),也不允许您选择不同的时区。

    输入外部^{} module;它有一个解析函数,可以处理几乎任何事情,并正确地支持时区>>> import dateutil.parser

    >>> dt = dateutil.parser.parse(date)

    >>> dt

    datetime.datetime(2012, 8, 28, 2, 49, 13, tzinfo=tzoffset(None, -18000))

    parse()函数返回一个^{} instance,这使得格式化更加容易。现在,我们可以使用^{} function来像您的电子邮件客户端那样输出:>>> print dt.strftime('%a, %b %d, %Y at %I:%M %p')

    Tue, Aug 28, 2012 at 02:49 AM

    当然,这仍然在本地时区中;要将其转换为您的时区,请使用^{} method,并使用一个新的tzone对象。这个python-dateutil包对我们来说很方便。

    以下是您如何在本地时区(到您的机器)中打印它:>>> import dateutil.tz

    >>> print dt.astimezone(dateutil.tz.tzlocal()).strftime('%a, %b %d, %Y at %I:%M %p')

    Tue, Aug 28, 2012 at 09:49 AM

    或者使用特定时区:>>> print dt.astimezone(dateutil.tz.tzstr('Asia/Kolkata')).strftime('%a, %b %d, %Y at %I:%M %p')

    Tue, Aug 28, 2012 at 07:49 AM

    更多相关内容
  • 本软件是由邮箱资料站旗下outlook邮箱产品技术部独家研制开发,软件采用直观方式已发出或收到的邮件时间进行修改,直接导入登录网页,取得相关值,然后进行已发出或收到的邮件时间修改,已发出或收到的邮件时间修改...
  • 批量修改文件的创建时间修改时间、访问时间、只读、系统、隐藏属性 批量修改文件的创建时间修改时间、访问时间、只读、系统、隐藏属性 批量修改文件的创建时间修改时间、访问时间、只读、系统、隐藏属性 ...
  • 3.1 python邮箱附件指定时间下载 3.2 python外部传参 3.3 C#界面设计 四、功能实现 4.1 邮箱设置 4.2 邮件附件下载实现 1、依赖的模块 2、核心代码 3、其他 4、异常处理 5、python代码调用测试 4.3 C#...

    目录

    一、需求背景

    二、需求分析

    三、需求实现

     3.1 python邮箱附件指定时间下载

    3.2 python外部传参

    3.3 C#界面设计

    四、功能实现

     4.1 邮箱设置

    4.2 邮件附件下载实现

    1、依赖的模块

    2、核心代码

    3、其他

    4、异常处理

    5、python代码调用测试

    4.3 C#内部代码实现

    1、保存路径中“选择路径”

    2、运行结束后清空控件中输入的数据

    3、各控件内容判断和处理

    4、C#调用外部多参数的exe

    五、问题或求教

    5.1 超大附件无法下载问题

    5.2 C#调用exe代码中的弊端

    5.3 C#程序运行依赖.NET环境

    六、结语

    参考:


    一、需求背景

           由于女朋友做助教,每周需要通过邮箱收数学作业,一个班五十几号人给她发送邮件,一个一个的点击下载非常耗时。所以想使用程序实现一下附件下载功能。

           根据网上相关资料,使用python实现邮箱附件批量下载,然后打包生成exe后,虽是脱离了python环境便于她使用,可对于她们这些没有接触编程的人员来说,cmd命令行调用exe的操作不便于理解和操作。为此,界面化程序开发选择了C#,从而实现了C#调用python开发的exe来完成邮箱附件批量下载功能。

    二、需求分析

    1、指定时间的附件下载:因为作业的收发是每周都要进行的,不可每次邮件全部下载,需要指定起始和终止日期来接收一段时间内的邮箱附件;

    2、基于界面化的操作,特别涉及邮箱登录等用户名、密码等信息,需要外部参数传参操作,即python核心代码中的参数输入需要留下外部接口;

    3、C#界面开发,需要提供基础的参数入口:邮箱类型、邮箱账号、密码、保存路径、起止时间;

    三、需求实现

     3.1 python邮箱附件指定时间下载

           该部分需要在邮件遍历过程中,设置起止时间根据邮件的接收时间来判断是否下载当前邮件内附件(参考[1]):

        # 解析邮件:
        msg = Parser().parsestr(msg_content)
        # 获取邮件日期,格式化收件时间
        date = time.strptime(msg.get('Date')[:24], '%a, %d %b %Y %H:%M:%S')
        date = time.strftime('%Y%m%d', date)#邮件时间格式转换
    		
        # 只下载发送日期在start_date 到end_date 之间的邮件附件
        if date < start_date :
            break
        if date > end_date :
            continue

    3.2 python外部传参

           结合需求3,需要在邮件附件下载代码中实现外部参数的传入,传入数量为邮箱账号、密码、保存路径、起止时间和邮箱类型(参考[2]): 

    import sys
    
    #------------------------------------------------------------------	
    arg1 = sys.argv[1]
    arg2 = sys.argv[2]
    arg3 = sys.argv[3]
    arg4 = sys.argv[4]
    arg5 = sys.argv[5]
    arg6 = sys.argv[6] 
    
    host = "pop."+arg6     #163.com" 
    #host = "pop.163.com"  # 邮箱域名,其他邮箱类似
    server = poplib.POP3(host)  # 建立链接
    username = arg1  # 用户名#"xxxxxxx@163.com"
    password = arg2  # 密码IMAP/SMTP的密码#"AAAAAAAAAAAAAAAA"
    start_date = arg4 #起始时间#'20210929'
    end_date = arg5  #终止时间#'20211008' 
    # 设置储存路径
    mail_att_dir = arg3    #r'D:\att_file'

    3.3 C#界面设计

          提供基础的参数入口:邮箱类型、邮箱账号、密码、保存路径、起止时间

    四、功能实现

     4.1 邮箱设置

           在实现邮件附件下载功能之前,首先需要开启邮箱的pop协议,一般在设置里,以163邮箱为例,设置后会给个密码,这个就是程序访问邮箱的登录密码:

    邮箱内测试邮件:

    4.2 邮件附件下载实现

    1、依赖的模块

    import email
    import os
    import poplib
    import time
    from email.header import decode_header
    from email.parser import Parser
    from email.utils import parseaddr
    import sys

    2、核心代码

    python遍历邮件批量下载指定时间段的邮件附件代码(参考[1、3]):

    def decode_str(s):
        """
        字符编码转换
        """
        value, charset = decode_header(s)[0]
        if charset:
            value = value.decode(charset)
        return value
    
    # 登录
    server.user(username)
    server.pass_(password)
    resp, mails, octets = server.list()  #获取所有邮件编号,mails的格式为['mesg_num octets', ...]
    
    # 倒序遍历邮件
    index = len(mails)
    for i in range(index, 0, -1):
        # lines存储了邮件的原始文本的每一行
        resp, lines, octets = server.retr(i)
        # 邮件的原始文本:
        msg_content = b'\r\n'.join(lines).decode('utf-8')     #⭐
    
        # 解析邮件:
        msg = Parser().parsestr(msg_content)
        # 获取邮件日期,格式化收件时间
        date = time.strptime(msg.get('Date')[:24], '%a, %d %b %Y %H:%M:%S')
        date = time.strftime('%Y%m%d', date)#邮件时间格式转换
    		
        # 只下载发送日期在arg1到arg2之间的邮件附件
        if date < start_date :
            break
        if date > end_date :
            continue
    			
        # 下载附件
        attachment_files = []
        for part in msg.walk():
            file_name = part.get_filename()  # 获取附件名称类型
            contType = part.get_content_type()
            if file_name:
                h = email.header.Header(file_name)
                dh = email.header.decode_header(h)  # 对附件名称进行解码
                filename = dh[0][0]
                if dh[0][1]:
                    filename = decode_str(str(filename, dh[0][1]))  # 将附件名称可读化
                data = part.get_payload(decode=True)  # 下载附件
                # 创建附件存储文件夹
                if not os.path.isdir(mail_att_dir ):
                    os.mkdir(mail_att_dir )
                # 在指定目录下创建文件,注意二进制文件需要用wb模式打开
                att_file = open(mail_att_dir + os.sep + filename, 'wb')
                attachment_files.append(filename)
                att_file.write(data)  # 保存附件
                att_file.close()
    server.quit()
    

    3、其他

    若需要获取邮件其他信息可以在循环中添加(参考[3-1]):

        #获取邮件的发件人,收件人, 抄送人,主题
        # hdr, addr = parseaddr(msg.get('From'))
        # From = self.decode_str(hdr)
        # hdr, addr = parseaddr(msg.get('To'))
        # To = self.decode_str(hdr)
                
        # 方法2:from or Form均可
        From = parseaddr(msg.get('from'))[1]
        To = parseaddr(msg.get('To'))[1]
        Cc = parseaddr(msg.get_all('Cc'))[1]          # 抄送人
        Subject = decode_str(msg.get('Subject'))
        print('from:%s,to:%s,Cc:%s,subject:%s'%(From,To,Cc,Subject))

    这一块还有很多的功能或者细节可以完善(比如函数封装等等),具体的可以自己研究。

    4、异常处理

         对于有的同学,复制粘贴过去的代码,提示报错TabError: inconsistent use of tabs and spaces in indentation:参考[4-1],主要是代码中应该为空的缩进而没有为空,具体自己重新检查一下。

        对于在遍历下载中有可能出现UnicodeDecodeError: 'utf-8' codec can't decode byte..报错,参考[4-2],具体解决将代码中注释为⭐的一行代码如下修改(加上‘ignore’参数):

    #修改字符集参数,一般这种情况出现得较多是在国标码(GBK)和utf8之间选择出现了问题。
    #出现异常报错UnicodeDecodeError是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,因为默认就是这个参数,将其更改为ignore等即可。
    msg_content = b'\r\n'.join(lines).decode('utf-8','ignore')

    5、python代码调用测试

         以上编写后的.py文件在python中的调用测试情况:

    如此,则可以将其打包成exe,这个主要参考[2],通过Pyinstaller -F py_word.p打包成exe。

    4.3 C#内部代码实现

          根据需求设计出界面后,则需要代码实现内部相关的功能。

    1、保存路径中“选择路径”

    效果如下:

    因为保存路径需要输入绝对路径,那么路径太长的时候,手动输入还是比较麻烦,直接点击按钮“选择路径”,会弹出窗口,然后自己选择本机中对应的路径文件夹,然后该路径同时显示在textbox中。

    实现代码(参考[5]): 

            /// <summary>
            /// 对话框形式选择文件夹路径
            /// </summary>
            /// <returns>返回所选择的文件夹路径</returns>
            public string ChooseFolderPath()
            {
                FolderBrowserDialog fbd = new FolderBrowserDialog();
                fbd.RootFolder = System.Environment.SpecialFolder.Desktop;
                fbd.ShowNewFolderButton = true;
                fbd.Description = "请选择目录";
                if (fbd.ShowDialog() == DialogResult.OK)
                {
                    return fbd.SelectedPath.ToString();
                }
                else
                {
                    return "";
                }
            }
            //点击事件调用
            private void button3_Click(object sender, EventArgs e)
            {
                string path;
                if ((path = ChooseFolderPath()) == "")
                {
                    //do nothing
                }
                else
                {
                    textBox3.Text = path;
                }
            }

    2、运行结束后清空控件中输入的数据

    这个主要代码(参考[6]):

    private void ClearAllTxt()
    {
        foreach (Control ctr in splitContainer1.Panel1.Controls)
        {
            if (ctr is TextBox)
            {
                TextBox tb = ctr as TextBox;
                tb.Text = string.Empty;
                //ctr.Text = "";
            }
            if (ctr is ComboBox)
            {
                ComboBox cob = ctr as ComboBox;
                cob.SelectedIndex = -1;
            }
         }
    }

    3、各控件内容判断和处理

           各个textbox控件输入信息的判断和处理,包括空值的警告和报错,然后主要的是邮箱账号和邮箱类型的处理与判断,这给用户有很大的便捷。输入账户不带邮箱后缀,将会代码自动补全,另外检查选择的邮箱类型和输入账户邮箱类型是否一致。主要代码:

                if (textBox1.Text == "")
                {
                    MessageBox.Show("邮箱账号不能为空,请输入需要批量下载附件的邮箱账号!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                string UserName = "";
                string emailtype = "";
                string typeEmail = textBox1.Text;//C#中字符串处理后需要再次赋值的,否则不改变
                int index = typeEmail.IndexOf("@");//检索用户名@后面的字符,获取输入的邮箱类型
                int len = typeEmail.Length;
                if(index == -1)//用户名未带邮箱类型
                {
                    if (comboBox1.Text == "")
                    {
                        MessageBox.Show("未输入邮箱类型,请手动输入或选择!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                    else
                    {
                        UserName = textBox1.Text + "@" + comboBox1.Text;
                        emailtype = comboBox1.Text;
                    }
                }
                else
                {
                    typeEmail = typeEmail.Substring(index+1);//取后面的邮箱类型
                    //typeEmail = typeEmail.Remove(0,index+1);//取后面的邮箱类型                            
                    if (comboBox1.Text == "")
                    {//以手动输入为准
                        UserName = textBox1.Text;
                        emailtype = typeEmail;
                    }
                    else
                    {
                        if (typeEmail.Equals(comboBox1.Text))
                        {
                            emailtype = comboBox1.Text;
                            //正确一致
                        }
                        else
                        {
                            MessageBox.Show("选择和手动输入的邮箱类型不一致,请检查!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            return;
                        }
                    }        
                }

    这里面主要涉及了字符串的处理(截取,比较等),参考[7、8]。

    4、C#调用外部多参数的exe

    主要参考[9],代码为:

    string str = Environment.CurrentDirectory;//当前路径的字符串
    string exePath = str + @"\GetEmailfile.exe";//这样写的弊端是需将执行的exe文件存放至界面开发的同目录下,命名也是固定的
    //调用exe文件
    string[] the_args = { UserName, PassWord, FilePath, StarDay, EndDay, emailtype };   // 被调exe接受的参数
    StartProcess(exePath, the_args);

    这里面存在一定的弊端:需将执行的exe文件存放至界面开发的同目录下,命名也是固定的,大家有什么好的解决方法也可在评论区告知。

    五、问题或求教

    5.1 超大附件无法下载问题

           因为邮件发送形式多样有附件和超大附件等,很多同学发送大文件也必须发送超大附件。特别是其他类型邮箱之间互发送超大附件还要跳转。

           在这样情况下,大批量的邮件中如果有同学通过邮箱发送了超大附件该怎么一起下载下来呢?我测试发现以上方法不能下载超大附件,只能下载邮件附件呀。有了解的朋友可以写在评论区呀。

    5.2 C#调用exe代码中的弊端

         根据我写的代码可以发现调用exe需要与开发的GetEmailFileApp.exe放在一个目录下,即需将执行的exe文件存放至界面开发的同目录下,GetEmailfile.exe命名也必须固定的。大家有什么好的解决方法也可在评论区告知。

    5.3 C#程序运行依赖.NET环境

         通常情况下,运行C#程序,需要系统安装.NET 框架,为此生成Release版本的exe后,交给别人使用,需要他人电脑上有.NET环境,这个查过一些资料似乎没有特别有效的解决方法,除了安装环境,另外参考[10](需要携带飞信文件夹)。

    六、结语

           基于上述功能的实现,最终这个小程序的核心也就完成了,细枝末节看个人添加,譬如我就在右边加上了软件参数输入提示,Help内有版本等开发信息等。有兴趣的小伙伴也可以自己练练手,我也将该资源进行了上传,有需要的小伙伴可自己下载。

    批量下载电子邮件工程代码.rar-Python文档类资源-CSDN文库icon-default.png?t=LA92https://download.csdn.net/download/nanke_yh/60227439

    参考:

    [1]python指定时间邮件附件下载:python 批量下载指定时间段的邮箱附件_沈帅杰的博客-CSDN博客

    [2]python外部传参和打包:python 外部传参程序编写并打包exe及其调用方式_nanke_yh的博客-CSDN博客

    [3]python实现邮件附件下载:[506]python实现邮件接收、附件下载_周小董-CSDN博客_python下载邮件附件

    python批量下载邮件附件 - 臭咸鱼 - 博客园 (cnblogs.com)

    python实现邮件接收、附件下载操作_u012209894的专栏-CSDN博客

    [4]python异常解决:

    Python中常出现TabError: inconsistent use of tabs and spaces in indentation错误解决方法_糖糖的唐的博客-CSDN博客Python3解决UnicodeDecodeError: 'utf-8' codec can't decode byte..问题 终极解决方案_技术笔记-CSDN博客

    [5]C#窗口形式打开文件路径:C#winForm窗体,以窗口对话形式选择文件夹、文件路径_iceberg的专栏-CSDN博客

    [6]控件数据清空:C#小程序执行后及时清空控件中的数据_nanke_yh的博客-CSDN博客

    【C#】一次性清空textbox、combobox中所有的内容_李光 未来科技-CSDN博客_c#清空textbox内容

    [7]C#字符串截取:C#字符串的截取函数用法总结_C#教程_脚本之家 (jb51.net)

    [8]C#字符串操作:c#中字符串操作函数 - 张@天 - 博客园 (cnblogs.com)

    [9]C#调用exe:C# 调用外部exe,且带参数_nanke_yh的博客-CSDN博客

    [10]C#程序.NET环境问题:C#程序不用安装.NET环境运行(让C#程序脱离.net框架) - 郑文亮 - 博客园 (cnblogs.com)

    展开全文
  • 文件的最后修改及最后访问时间随机调整为发邮件前20~25分钟;文件超过10M或是一个文件夹时,则自动生成zip压缩包;通过邮箱自动发送。有几个点需要特别注意一下:修改文件的时间属性需要用到win32API的SetFileTime,...

    虽然主流邮箱都可以定时发送邮件,但还是尝试用python写了一个定时发送邮件的脚本,设定好一个发送时间后,可以按下面步骤将文件通过QQ邮箱发送出去。

    文件的最后修改及最后访问时间随机调整为发邮件前20~25分钟;

    文件超过10M或是一个文件夹时,则自动生成zip压缩包;

    通过邮箱自动发送。

    有几个点需要特别注意一下:

    修改文件的时间属性需要用到win32API的SetFileTime,所以需要先安装pywin32模块;

    因为是通过SMTP服务发送的邮件,需要先在电子邮箱中打开SMTP服务

    使用SMTP发送邮件需要邮箱地址和授权码,授权码需要在邮箱设置中获取

    以下代码:

    from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle

    from win32file import GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING

    from pywintypes import Time

    from threading import Timer

    from email.header import Header

    from email.mime.text import MIMEText

    from email.mime.application import MIMEApplication

    from email.mime.multipart import MIMEMultipart

    import time, os, random, zipfile, smtplib

    def ModifyFileTime(filePath, lastTime):

    #构造时间

    fh = CreateFile(filePath, GENERIC_READ|GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)

    offsetSec=random.randint(1200, 1500)

    cTime, aTime, wTime = GetFileTime(fh)

    aTime = Time(time.mktime(lastTime) - offsetSec)

    wTime = Time(time.mktime(lastTime) - offsetSec)

    #修改时间属性

    SetFileTime(fh, cTime, aTime, wTime)

    CloseHandle(fh)

    def GetFilePathList(filePath, result):

    if os.path.isdir(filePath):

    files = os.listdir(filePath)

    for file in files:

    if os.path.isdir(filePath + '/' +file):

    GetFilePathList(filePath + '/' + file, result)

    else:

    result.append(filePath + '/' + file)

    else:

    result.append(filePath)

    def RunZipFile(filePath):

    #构造压缩包路径

    zipFilePath = os.path.basename(filePath)

    if os.path.isdir(filePath):

    zipFilePath = zipFilePath + '.zip'

    else:

    zipFilePath = os.path.splitext(zipFilePath)[0] + '.zip'

    #文件已存在则删除原有文件

    if os.path.exists(zipFilePath):

    os.remove(zipFilePath)

    #创建压缩包

    zipFileList = []

    GetFilePathList(filePath, zipFileList)

    f = zipfile.ZipFile(zipFilePath, 'w', zipfile.ZIP_DEFLATED)

    for fileP in zipFileList:

    arcName = os.path.basename(fileP)

    if os.path.isdir(filePath):

    dirName = os.path.dirname(fileP)

    arcName = dirName.replace(os.path.dirname(dirName),'') + '/' + arcName

    f.write(fileP, arcName)

    f.close()

    return zipFilePath

    def SendEmail(filePath):

    #邮件设置

    fromAddr = 'XXXXXXXXX@qq.com'#发件地址

    autho = 'XXXXXXXXXXXXXXXX'#授权码

    smtpServer = 'smtp.qq.com'#smtp服务器

    #邮件信息

    toAddr = 'XXXXXXXX@163.com'#收件地址

    title = "YourTitle"#主题

    text = 'YourText'#正文

    annexPath = filePath#附件路径

    #构造邮件

    message = MIMEMultipart()

    message['From'] = fromAddr

    message['To'] = toAddr

    message['Subject'] = Header(title, 'utf-8')

    message.attach(MIMEText(text, 'plain', 'utf-8'))

    #构造附件

    annex = MIMEApplication(open(annexPath,'rb').read())

    annex.add_header('Content-Disposition', 'attachment', filename = os.path.basename(annexPath))

    message.attach(annex)

    #发送邮件

    server = smtplib.SMTP_SSL(smtpServer, 465)

    server.login(fromAddr, autho)

    server.sendmail(fromAddr, [toAddr], message.as_string())

    server.quit()

    def PreparingFilesAndSend(filePath, runTime):

    annexPath = filePath

    if os.path.isdir(filePath):

    #遍历文件,修改时间属性

    modFileList = []

    GetFilePathList(filePath, modFileList)

    for fileP in modFileList:

    ModifyFileTime(fileP, runTime)

    #打包

    annexPath = RunZipFile(filePath)

    else:

    #修改时间属性

    ModifyFileTime(filePath, runTime)

    #判断是否需要压缩

    if os.path.getsize(filePath)/float(1024*1024) > 10:

    annexPath = RunZipFile(filePath)

    #发送邮件

    SendEmail(annexPath)

    def TimedTask(filePath, runTime):

    interval = time.mktime(runTime) - time.mktime(time.localtime())

    Timer(interval, PreparingFilesAndSend, args=(filePath, runTime)).start()

    fp = r"C:/Users/imfour/Documents/pythonTest/testtxt.txt"

    rt = "2019-6-17 02:08:00"

    #转化为结构化时间

    timeFormat = "%Y-%m-%d %H:%M:%S"

    s_time=time.strptime(rt, timeFormat)

    if __name__ == "__main__":

    TimedTask(fp, s_time)

    https://www.jianzhuj.cn/news/17593.html

    展开全文
  • 4.修改runtime文件夹权限777 5.访问http#//域名/install.php安装 按照完成后可删除以下文件。 public/database.sql public/install.php 未使用apache可删除以下文件 public/.htaccess 定时任务设置(按需求...
  • 4.修改runtime文件夹权限777 5.访问http#//域名/install.php安装 按照完成后可删除以下文件。 public/database.sql public/install.php 未使用apache可删除以下文件 public/.htaccess 定时任务设置(按需求...
  • Python邮件发送设置

    2020-11-29 13:56:50
    /usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'tian'__data__ = '2018/4/18 11:53'import smtplibfrom email.mime.text import MIMEText #MIMEText纯文本邮件模板#发邮件相关的参数smtpserver = "...

    1、自定义发送内容,发送给单个收件人

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    __author__ = 'tian'

    __data__ = '2018/4/18 11:53'

    import smtplib

    from email.mime.text import MIMEText #MIMEText纯文本邮件模板

    #发邮件相关的参数

    smtpserver = "smtp.126.com" #发件服务器

    port = 0 #端口

    sender = "test_tx@126.com" # 账号

    pwd = "xxxoooxxxoooxx" #发信密码一定要126开启smtp发给的密码,不是126登录的密码

    receiver = '352932341@qq.com'#收件人列表

    #编辑邮件内容

    subject = "测试主题163" #自定义发送邮件主题

    body = '

    这是发送邮件的内容

    ' #自定义邮件正文,这里为html格式

    msg = MIMEText(body,'html','utf-8')

    msg['from'] = sender #发送者

    msg['to'] = receiver #接收者

    msg['subject'] = subject #主题

    #发送邮件

    try: #不用SSL认证

    smtp = smtplib.SMTP()

    smtp.connect(smtpserver)#连接服务器

    smtp.login(sender,pwd) #登录

    except:#需要SSL认证

    smtp = smtplib.SMTP_SSL(smtpserver,port) #ssl认证,例如qq邮箱

    smtp.login(sender,pwd) #登录

    smtp.sendmail(sender,receiver,msg.as_string())#发送

    smtp.quit() #关闭

    884151-20180418142012871-1973790351.png

    2、发送带附件且发送给多人

    需求:找到report目录下面最新的.html文件,然后调用本地搭建的邮件服务器发送给多人;

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    __author__ = 'tian'

    __data__ = '2018/4/17 10:29'

    import smtplib

    from email_22.mime.text import MIMEText #纯文本邮件模板

    from email_22.mime.multipart import MIMEMultipart #发送带附件

    import os

    def send_email(file_new):

    #------------发件相关的参数------------------

    smtpserver = "192.168.10.193" #发件服务器,本地搭建

    port = 25 #端口

    sender = "tianxiang@gz609.com" #账号

    password = "xxxxxxooooo" #密码

    receiver = ["352932341@qq.com","252xxxx000xx0@qq.com"]#多个收件人

    #-------------编辑邮件内容--------------------

    # 读文件

    with open(file_new,"rb") as fr:

    mail_body = fr.read()

    msg = MIMEMultipart()

    msg['From'] = sender #发件人

    msg['To'] = ";".join(receiver) #收件人

    msg['Subject'] = "appURL对比返回json结果" #主题

    #正文

    body = MIMEText(mail_body,"html","utf-8")

    msg.attach(body)

    #附件

    att = MIMEText(mail_body,_subtype='html',_charset="utf-8")

    att["Content-Type"] = "application/octet-stream"

    att["Content-Disposition"] = 'attachment; filename="test_report.html"'

    msg.attach(att)

    #发送邮件

    try:

    smtp = smtplib.SMTP()

    smtp.connect(smtpserver) #连接服务器

    smtp.login(sender,password)#登录

    except Exception as er:

    smtp = smtplib.SMTP_SSL(smtpserver,port)

    smtp.login(sender,password)#登录

    smtp.sendmail(sender,receiver,msg.as_string())#发送

    smtp.quit()#关闭

    def send_report(testreport):

    '''获取testreport目录下面最新的html文件'''

    result_dir = testreport

    lists = os.listdir(result_dir) #获取该目录下面的所有文件

    #找到最新生成的文件

    lists.sort(key=lambda fn:os.path.getmtime(result_dir+"\\"+fn))

    #找到最新生成的文件

    file_new = os.path.join(result_dir,lists[-1])

    #调用发邮件模块

    send_email(file_new)

    def main_email():

    '''需要发邮件文件中调用该方法'''

    testreport = './report'

    send_report(testreport)

    884151-20180418141913880-2142317784.png

    展开全文
  • 1. 单击“文件” 》 “选项” 》 “高级” 》 “发送...2. 组“所有账户”的设置 》 打勾“安排自动发送/接收的时间间隔为(V)” 1 分钟 》 关闭 》确定 转载于:https://www.cnblogs.com/ddbear/p/10818307.html...
  • 工作中如果每天需要发送日报啊,或者需要把相同的电子邮件发给不同顾客啊,定时发送某些提示邮件啊。学会这个就不会担心会忘记发了。下面的代码本人测试过没问题。#导入smtplib库import smtplib#导入我们需要的email...
  • 根据这一原理,ECPA 区分了在第三方服务器上电子存储时间不超过 180 天的电子邮件和电子存储时间超过 180 天的电子邮件。 存储时间不超过 180 天的电子邮件按照可能原因标准获得第四修正案的全面保护,而存储时间...
  • outlook2013接收邮件的刷新时间间隔

    千次阅读 2018-03-27 11:39:56
    首先打开文件选项卡选择选项选择高级选项卡找到发送和接收修改时间间隔
  • 一个可以修改forxmail批量导出邮件名称的小工具,默认Foxmail导出的邮件都是按邮件标题,这个小工具可以把名称增加一个时间点!有用的上的可以参考
  • 3,邮件发送成功后,客户打开会获取到用户的IP 打开时间,邮箱地址。 4,登录后删除单条统计 具体功能自己体会 注:修改本系统的请保留版权(页面注释)如果你修改的功能很好请发一份给我,谢谢 BUG 报告xupeng@...
  • 最近新开学,接到了给老板的本科课程当助教的工作,百十来号人一学期下来得有四五次作业发进邮箱里,需要我来统计打分,想想挨个点进去...经过修改以后下面的脚本可以从邮箱中获取指定日期范围内的邮件附件,并存如指
  • SAP可配置为邮件服务器,不仅能向SAP user发送邮件,也能发送外部邮件,具体步骤如下: RZ10 配置参数文件Profile parameter(RZ10)点修改,新建参数icm/server_port_1 赋值为" PROT=SMTP,PORT=25" icm/server_port_...
  • 每天早上需要发站会纪要,纪要内容为组员昨日的工作完成情况,工作完成情况需要从每个组员的exchange邮件中选择昨日发的日报邮件,提取信息,因组员很多,每天这种重复的复制粘贴操作很麻烦,就想到了用java写个程序...
  • 配置该脚本后,将以可变间隔X(秒/分钟/小时/天)向您的电子邮件发送一封电子邮件(1-4),通知您WAN IP更改时间。 支持GMail,Hotmail,Outlook 可用的SMTP电子邮件发送格式:sendmail-更高的StartTLS v1.1...
  • 省去了手动分捡邮件时间。 2。在microsoft outlook中增加"Open Target Folder"和"Open Folder By Name..."两个自定义功能菜单项(项目名可自行修改)。选中某一邮件并点击"Open Target Folder",会打开选择中邮件...
  • 所有发送的邮件,都建立在数据库中,所以可以重复发送,修改等等。 5.定时群发任务 潘田邮件群发系统支持定时多任务群发功能,对在线邮件营销非常方便。不用人工手动发送,只要把群发任务设置好,不要关浏览器,...
  • 1上安装SMTP服务器。2.修改SMTP服务器IP地址和端口号设置。启动、停止、暂停SMTP服务器-8出站连接的身份验证设置-11重传域间隔时间设置-12消息跳跃计数设置-有截图和详细步骤
  • 如何在Outlook中更改IMAP帐户的“已删除邮件”文件夹?当我们将Gmail帐户添加到Microsoft Outlook时,所有已删除的邮件都存储在Gmail文件夹下的Delete Items文件夹中,而不是此Gmail帐户根文件夹下的Delete Items...
  • FASTmail 是一种专用到EDM邮件营销到达率测试工具 PHP 批量邮箱账号收件程序 本程序免费,爱好者可任意修改,但请页面保留版权和连接 可以批量收取常见邮箱的邮件标题,适合管理大量的邮件发送账号,一次可处理几千个,你...
  • 客户有多个邮箱账号,设置了配置邮箱账号程序,客户能够更改smtp账号进行发送4.2010.09.15 优化的群发程序,制作了等待提示框,发信设置了间隔时间,最大限度防止收件人邮件服务器屏蔽。由于php的局限性,这种小批量...
  • 删除domino所有用户的N天前的邮件记录,给服务器节省空间。 这是经过测试ok的代码,并且经过修改已经正常运行用在生产上。 可以设置在代理上,让代理每天在指定时间自动删除。 非常方便的
  • php 邮件发送问题解决

    2020-12-18 21:30:46
    这段时间修改了一下我们系统的登陆功能,为了更加安全,增加了发送邮件验证功能。当用户登陆的时候判断登陆ip是否是之前登陆过的,如果不是的话,需要向邮箱里发送验证码,然后把收到的验证码输入再登陆,如果验证码...
  • Prometheus 邮件告警自定义模板的默认使用的是utc时间。 解决 如果要改成北京时间的话可以这么改: 原来的告警模板的触发时间是这样子的: 触发时间: {{ .StartsAt.Format "2020-01-02 15:04:05" }} 我们可以改成这...
  • 能针对所有经过网关的邮件进行多条件的智能过滤,通过邮件主题、发件人/收件人ip或者账号、邮件内容、附件名、收发时间、部门等等条件过滤,让每一封邮件都难逃规则之网。 7. 遵从塞班斯法案,集成邮件归档系统 ...
  • 参考大神的 点击跳转 我自己也对邮件的功能进行了实践效果图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 281,991
精华内容 112,796
热门标签
关键字:

怎样修改邮件时间