python实现电子邮件附件指定时间段,批量下载以及C#小程序集成实现(二)

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

4.3 C#内部代码实现


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


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


效果如下:

image.png

因为保存路径需要输入绝对路径,那么路径太长的时候,手动输入还是比较麻烦,直接点击按钮“选择路径”,会弹出窗口,然后自己选择本机中对应的路径文件夹,然后该路径同时显示在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内有版本等开发信息等。有兴趣的小伙伴也可以自己练练手,我也将该资源进行了上传,有需要的小伙伴可自己下载。


参考:


[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)

目录
相关文章
|
4月前
|
存储 测试技术 C#
Azure 云服务与 C# 集成浅谈
本文介绍了 Azure 云服务与 C# 的集成方法,涵盖基础概念、资源创建、SDK 使用、常见问题解决及单元测试等内容,通过代码示例详细说明了如何在 C# 中调用 Azure 服务,帮助开发者提高开发效率和代码质量。
79 8
|
4月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
247 3
|
26天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
114 2
|
7月前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
93 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
3月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
134 4
|
4月前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
158 9
|
4月前
|
Devops jenkins 测试技术
C# 一分钟浅谈:自动化部署与持续集成
【10月更文挑战第21天】本文介绍了自动化部署和持续集成(CI)在C#项目中的应用,涵盖基础概念、常用工具(如Jenkins、GitHub Actions、Azure DevOps、GitLab CI/CD)、常见问题及解决方案,以及实践案例和代码示例。通过合理配置CI/CD工具,可以显著提高开发效率和代码质量。
119 1
|
4月前
|
Kubernetes 测试技术 持续交付
C# 一分钟浅谈:集成测试与系统测试
【10月更文挑战第19天】本文详细介绍了集成测试和系统测试的概念、目的及其在软件开发中的重要性。通过分析常见问题和易错点,结合代码示例,探讨了如何通过代码规范、自动化测试和持续集成等方法提高测试效果,确保软件质量和可靠性。
265 1
|
8月前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
221 3
|
8月前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。

热门文章

最新文章