本篇就最近工作解决的问题做个代码收集。包括以下几个方面:发邮件、二维码生成、文件下载、压缩、导出excel。有一种可用的解决方法就好,不求全面,不求原理。

1、发邮件:

命名空间:System.Net.Mail
程序集:System(在 system.dll 中)

tips: MailMessage 类的实例用于构造可使用 SmtpClient 类传输到 SMTP 服务器以便传递的电子邮件。

若要指定电子邮件的发件人、收件人和内容,请使用 MailMessage 类的关联属性。一般需要注意的有 发件人From、收件人To、抄送 (CC)、密件抄送 (BCC)、附件Attachments、主题Subject、邮件正文Body。
另外,测试时正文和标题不要随意输入类似"afdadva"等等的无意义字母数字,会被服务器默认为垃圾邮件而拦截。

       string senderServerIp = "smtp.126.com";

                         string fromMailAddress = "xxx@126.com";
string mailUsername = "xxx@126.com";
string mailPassword = "pppp"; //发送邮箱的密码
string mailPort = "";
string attachPath = path + "/" + fileName;//附件
parmer.Content = "该邮件由系统代发.";
MailHelper email = new MailHelper(senderServerIp, parmer.ReceiveMailbox, fromMailAddress,
parmer.Title, parmer.Content, mailUsername, mailPassword, mailPort, false, true);
email.AddAttachments(attachPath);
email.Send();

调用示例

 using System;
using System.IO;
using System.Net.Mail;
using System.Net.Mime; namespace NewEnergyHandler.Common
{
public class MailHelper
{
private readonly MailMessage _mMailMessage; //主要处理发送邮件的内容(如:收发人地址、标题、主体、图片等等)
private SmtpClient _mSmtpClient; //主要处理用smtp方式发送此邮件的配置信息(如:邮件服务器、发送端口号、验证方式等等)
private readonly int _mSenderPort; //发送邮件所用的端口号(htmp协议默认为25)
private readonly string _mSenderServerHost; //发件箱的邮件服务器地址(IP形式或字符串形式均可)
private readonly string _mSenderPassword; //发件箱的密码
private readonly string _mSenderUsername; //发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)
private readonly bool _mEnableSsl; //是否对邮件内容进行socket层加密传输
private readonly bool _mEnablePwdAuthentication; //是否对发件人邮箱进行密码验证 ///<summary>
/// 构造函数
///</summary>
///<param name="server">发件箱的邮件服务器地址</param>
///<param name="toMail">收件人地址(可以是多个收件人,程序中是以“;"进行区分的)</param>
///<param name="fromMail">发件人地址</param>
///<param name="subject">邮件标题</param>
///<param name="emailBody">邮件内容(可以以html格式进行设计)</param>
///<param name="username">发件箱的用户名(即@符号前面的字符串,例如:hello@163.com,用户名为:hello)</param>
///<param name="password">发件人邮箱密码</param>
///<param name="port">发送邮件所用的端口号(htmp协议默认为25)</param>
///<param name="sslEnable">true表示对邮件内容进行socket层加密传输,false表示不加密</param>
///<param name="pwdCheckEnable">true表示对发件人邮箱进行密码验证,false表示不对发件人邮箱进行密码验证</param>
public MailHelper(string server, string toMail, string fromMail, string subject, string emailBody, string username, string password, string port, bool sslEnable, bool pwdCheckEnable)
{
try
{
_mMailMessage = new MailMessage();
_mMailMessage.To.Add(toMail);
_mMailMessage.From = new MailAddress(fromMail);
_mMailMessage.Subject = subject;
_mMailMessage.Body = emailBody;
_mMailMessage.IsBodyHtml = true;
_mMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
_mMailMessage.Priority = MailPriority.Normal;
_mSenderServerHost = server;
_mSenderUsername = username;
_mSenderPassword = password;
_mSenderPort = Convert.ToInt32(port);
_mEnableSsl = sslEnable;
_mEnablePwdAuthentication = pwdCheckEnable;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
} ///<summary>
/// 添加附件
///</summary>
///<param name="attachmentsPath">附件的路径集合,以分号分隔</param>
public void AddAttachments(string attachmentsPath)
{
try
{
string[] path = attachmentsPath.Split(';'); //以什么符号分隔可以自定义
for (int i = ; i < path.Length; i++)
{
var data = new Attachment(path[i], MediaTypeNames.Application.Octet);
var disposition = data.ContentDisposition;
disposition.CreationDate = File.GetCreationTime(path[i]);
disposition.ModificationDate = File.GetLastWriteTime(path[i]);
disposition.ReadDate = File.GetLastAccessTime(path[i]);
disposition.FileName = path[i].Substring(path[i].LastIndexOf('/')+);
_mMailMessage.Attachments.Add(data);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
} ///<summary>
/// 邮件的发送
///</summary>
public void Send()
{
try
{
if (_mMailMessage != null)
{
_mSmtpClient = new SmtpClient
{
Host = _mSenderServerHost,
Port = _mSenderPort,
UseDefaultCredentials = false,
EnableSsl = _mEnableSsl
};
if (_mEnablePwdAuthentication)
{
System.Net.NetworkCredential nc = new System.Net.NetworkCredential(_mSenderUsername, _mSenderPassword);
_mSmtpClient.Credentials = nc.GetCredential(_mSmtpClient.Host, _mSmtpClient.Port, "NTLM");
}
else
{
_mSmtpClient.Credentials = new System.Net.NetworkCredential(_mSenderUsername, _mSenderPassword);
}
_mSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
_mSmtpClient.Send(_mMailMessage);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}

MailHelper 辅助类

2、二维码生成

命名空间:using ThoughtWorks.QRCode.Codec;

程序集:ThoughtWorks.QRCode.dll(需从网上下载)。

tips: QRCodeEncoder类设置一下生成相关的参数,而后 确定二维码里的内容,以及要保存的文件名和路径即可。

 QrCodeHelper qrCodeHelper =new QrCodeHelper();
var qrCodeFilePath = qrCodeHelper.CreateCode_Simple("testString.");
using System;
using System.Drawing;
using System.IO;
using System.Text;
using ThoughtWorks.QRCode.Codec; namespace Common
{
public class QrCodeHelper
{
public string CreateNr(int id)
{
return id.ToString();
}
//程序路径
readonly string _currentPath = ConfigHelper.GetConfigString("QrCodePicPath");
public string CreateCode_Simple(int scale, string nr)
{
var qrCodeEncoder = new QRCodeEncoder
{
QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,
QRCodeScale = scale,
QRCodeVersion = ,
QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M
};
Image image = qrCodeEncoder.Encode(nr, Encoding.UTF8); //文件名
var fileName = DateTime.Now.ToString(@"yyyymmddhhmmssfff");
SaveImg(_currentPath, fileName + ".jpg", image);
image.Dispose();
return fileName;
}
public string CreateCode_Simple(string nr)
{
return CreateCode_Simple(, nr);
} /// <summary>
/// 保存图片
/// </summary>
/// <param name="strPath">保存路径</param>
/// <param name="fileName"></param>
/// <param name="img">图片</param>
public static void SaveImg(string strPath, string fileName, Image img)
{
//保存图片到目录
if (!Directory.Exists(strPath))
{
//当前目录不存在,则创建
Directory.CreateDirectory(strPath);
}
img.Save(strPath + "/" + fileName, System.Drawing.Imaging.ImageFormat.Jpeg); } }
}

QrCodeHelper辅助类

3、文件下载

网站下载一般就是Response里写入文件,注意下文件的后缀,类型匹配就ok。

                 var response = HttpContext.Response;
response.Clear();
response.Buffer = true;
response.Charset = "utf-8";
var file1 = "xxx.dll";
response.AppendHeader("Content-Disposition", "attachment;filename=" + file1);
response.ContentEncoding = System.Text.Encoding.UTF8;
response.ContentType = "application/x-msdownload";
var pathTest = "D:/CommonTest";
response.WriteFile(pathTest + "/" + file1);
response.End();

HttpContext.Response

4、压缩

这篇博文详细明了:.NET 4.5 中新提供的压缩类

5、导出excel

命名空间:using Aspose.Cells;

程序集:Aspose.Cells.dll

tips:Aspose可以脱离微软的excel,方便使用。

            var workbook = new Workbook();
var sheet = workbook.Worksheets[];
var colIndex = "A";
string title = "名称,分类,编号,单位,数量,状态,责任人,部门,时间";
string[] titleList=title.Split(',');
foreach (string item in titleList)
{
sheet.Cells[colIndex + ].PutValue(item);
sheet.Cells[colIndex + ].SetStyle(styleTitle);
colIndex = ((char)(colIndex[] + )).ToString();
} workbook.Save(file);

1 生成标题

           int row = ;
int column;
foreach (var d in data)
{
column = ;
var model= d as Model;
if (model== null) continue;
//和你的标题对应好就行。
sheet.Cells[row, column].PutValue(model.Name);
sheet.Cells[row, column++].SetStyle(styleBody);//设置样式
}

2 插入数据列

如果是单条数据要做一个卡片的excel,可以先写个模版,然后打开模版,填充数据。我遇到过把不同类型的数据都做成卡片,添加到一个个sheet里。

  var workbookResult = new Workbook();

            var workbookType1 = new Workbook();
var workbookType2 = new Workbook();
var workbookType3 = new Workbook();
workbookType1.Open(path + "/type1.xlsx");
workbookType2.Open(path + "/type2.xlsx");
workbookType3.Open(path + "/type3.xlsx"); Worksheet sheet;
if(type=type1)
{
sheet = workbookType1.Worksheets[];
var cells = sheet.Cells; //单元格
//todo: 填充你的数据到cells.
}
else if(..){}
else if(..){} workbookResult.Worksheets.Add(); //新增一个sheet
var sheetR = workbook.Worksheets[i++];
sheetR.Copy(sheet); //将生成的结果拷贝到新的sheet中
workbookResult.Save(fileName);

3 模版使用

                        var path = ConfigHelper.GetConfigString("PicFilePath");
var image = Image.FromFile(path + "/" + asset.PicFile);
var ms = new MemoryStream();
image.Save(ms, ImageFormat.Jpeg);
sheet.Pictures.Add(, , , , ms); //左上角 和 右下角 的下标

4 导入图片

另注:以上用到的代码,很多都是网上搜索而来,并非原创,工作匆忙,未能保存原链接。若是原作者觉得侵权,删之。

杂项收集,包括-发邮件、二维码生成、文件下载、压缩、导出excel的更多相关文章

  1. 在云平台上基于Go语言+Google图表API提供二维码生成应用

    二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下 ...

  2. [开源]C#二维码生成解析工具,可添加自定义Logo

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  3. [开源]C#二维码生成解析工具,可添加自定义Logo (转)

    二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...

  4. C#二维码生成解析

    C#二维码生成解析工具,可添加自定义Logo 二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能 ...

  5. Android开发——Android中的二维码生成与扫描

    0. 前言 今天这篇文章主要描述二维码的生成与扫描,使用目前流行的Zxing,为什么要讲二维码,因为二维码太普遍了,随便一个Android APP都会有二维码扫描.本篇旨在帮助有需求的同学快速完成二维 ...

  6. Python 实现二维码生成和识别

    今天突然想给自己自己做个头像,然后还是二维码的形式,这样只要扫一扫就可以访问我的主页.然后就开始自己的苦逼之路... 其实实现二维码java,c#,C++等都可以实现:由于自己正在学python,所以 ...

  7. QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)

    原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) 提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一 ...

  8. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)

    原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)  http://blog.csdn.net/johnsu ...

  9. 聊聊 Web 项目二维码生成的最佳姿势

    在设计和实现的过程之后,你永远不知道部署上去的程序会已什么样的姿势运行. 本篇借一次生成二维码逻辑的不同实现,阐述 Web 项目中二维码生成的正确姿势. 文中如有批量,欢迎各位看客老爷拍砖.试运行前5 ...

随机推荐

  1. 常见Hibernate报错处理:出现“org.hibernate.QueryException: could not resolve property”和 is not mapped和could not locate named parameter错误的解决

    正确写法: @Override @SuppressWarnings("unchecked") public List<Device> queryOSDevice(Str ...

  2. vue总结介绍

    转自(https://zhuanlan.zhihu.com/p/23078117) 模板语法 Vue 提供了一堆数据绑定语法. {{ text }} 文本插值 <div v-html=" ...

  3. app crash率的标准

    手Q定义是: android:   发布目标是低于1% ios:  0.8%以下

  4. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何查看错误代码

    一般模块出错会在Error中显示为TRUE,同时ErrorID中会有一个错误代码,下图所示就是出错之后的效果   在变量表中也可以看到,右击转成16进制查看   由于是NC模块出错,所以可以再NC的E ...

  5. SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)   这个 ...

  6. js 自定义事件 包含 添加、激活、销毁

    1.思路 (1)构思 var eventTarget = { addEvent: function(){ //添加事件 }, fireEvent: function(){ //触发事件 }, remo ...

  7. 网络方面的常用命令 & 常用端口介绍

    在网络方面我们常常会用到如下命令: (1)ping命令:我们常常用来判断2台或2台以上的机器间是否网络连通. ping 192.168.1.88 -t 如果想看任何命令的参数是什么意思,我们只需要:命 ...

  8. 云解析DNS使用教程

    云解析(Domain. Name System,简称DNS)是一种高可用性.高可扩展的权威DNS服务和DNS管理服务.它的目的是为企业和开发者提供稳定.安全.智能的把网站域名或应用资源转换为计算机用于 ...

  9. PHP-php-fpm配置优化

    前言: 1.少安装PHP模块, 费内存 2.调高linux内核打开文件数量,可以使用这些命令(必须是root帐号)(我是修改/etc/rc.local,加入ulimit -SHn 51200的) ec ...

  10. select/poll/epoll原理探究及总结

    select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作.但select ...