本篇就最近工作解决的问题做个代码收集。包括以下几个方面:发邮件、二维码生成、文件下载、压缩、导出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. linux内核分析笔记----上半部与下半部(下)

    接着上节的来,我们在上节说了软中断和tasklet,那这最后就是工作队列了哦.. 工作队列和前面讨论的其他形式都不相同,它可以把工作推后,交由一个内核线程去执行----该工作总是会在进程上下文执行.这 ...

  2. javascript字符串处理方法

    字符串处理方法 1.字符串合并操作:“ + ”2.parseInt() 将数字字符串转化为整数3.parseFloat() 将数字字符串转化为小数4.split() 把一个字符串分隔成字符串组成的数组 ...

  3. 实现一个JDK代理demo

    JDK代理,非常简单地实现了动态代理(首先是实现对应的InvocationHandler:然后,以接口来为被调用目标构建代理对象,代理对象简介运行调用目标,并提供额外逻辑插入) 缺点:它是只能以接口为 ...

  4. Solr的精确匹配搜索

    情景: 利用Solr做一批词的逆文档频率.Solr中存储的每条数据为一篇文章,此时需要查出某词在多少篇文章中出现过,然后用公式:某词逆文档频率 = 总文章数 / (出现过某词的文章数+1) 来计算. ...

  5. Hex dump

    Hex dump From Wikipedia, the free encyclopedia       A hex dump of the 318 byte Wikipedia favicon In ...

  6. Python——在Unicode和普通字符串之间转换

    1.1. 问题 Problem You need to deal with data that doesn't fit in the ASCII character set. 你需要处理不适合用ASC ...

  7. import * as obj from 'xx'

    import * as obj from 'xx'  这种写法是把所有的输出包裹到obj对象里 例如: xx里中: export function hello(){ return '我是hello 内 ...

  8. iovec结构体定义及使用 (转)

    I/O向量(struct iovec) readv(2)与writev(2)函数都使用一个I/O向量的概念.这是由所包含的文件定义的: #include <sys/uio.h> 头文件定义 ...

  9. 取给定正整数的指定bit位開始的指定长度的数据

    接口说明 原型: unsigned int GetBitsValue(unsigned int input, unsigned int startbit, unsigned int bitlen) 输 ...

  10. 02-4设置第一启动项--U盘装系统中bios怎么设置USB启动

    整个U盘启动里最关键的一步就是设置U盘启动了,本教程内只是以特定型号的电脑为例进行演示,鉴于各种电脑不同BIOS设置U盘启动各有差异,所以如果下面的演示不能适用于你的电脑,建议去百度或者谷歌搜索一下你 ...