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内有版本等开发信息等。有兴趣的小伙伴也可以自己练练手,我也将该资源进行了上传,有需要的小伙伴可自己下载。
参考:
[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)