本篇就最近工作解决的问题做个代码收集。包括以下几个方面:发邮件、二维码生成、文件下载、压缩、导出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. Vue组件开发实例(详细注释)

    Vue组件开发实例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...

  2. http://www.ablanxue.com/shtml/201411/25904_1.shtml

    http://www.ablanxue.com/shtml/201411/25904_1.shtml

  3. java 把json对象中转成map键值对

    相关:Json对象与Json字符串的转化.JSON字符串与Java对象的转换 本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据 比如json数据如下: {responseHeade ...

  4. Mac上安装使用Nginx

    1.brew search nginx 2.brew install nginx 启动nginx ,sudo nginx ;访问localhost:8080 发现已出现nginx的欢迎页面了. 备注: ...

  5. 安装SpringExt以查看schema文件

    安装SpringExt以查看schema文件 学习了:https://blog.csdn.net/ltianchao/article/details/43565167 spring ext啊 mvn ...

  6. 怎样用Google APIs和Google的应用系统进行集成(4)----获得Access Token以通过一些Google APIs的OAuth2认证

    在上篇文章中: "怎样用Google APIs和Google的应用系统进行集成(3)----调用发现Google APIs的RESTful的服务"一文中,我们直接用jdk的java ...

  7. Spring搭配Ehcache实例解析

    转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/50538085 本文出自[我是干勾鱼的博客] 1 Ehcache简单介绍 EhCa ...

  8. 压测过程中,CPU和内存占用率很高,案例简单分析

    Q:  最近公司测试一个接口,数据库采用Mongo    并发策略:并发400个用户,每3秒加载5个用户,持续运行30分钟    数据量:8000条左右 压测结果发现:    TPS始终在5左右   ...

  9. 使用history.pushState()和popstate事件实现AJAX的前进、后退功能

    上一篇文章中.我们使用location.hash来模拟ajax的前进后退功能.使用location.hash存在以下几个问题: 1.使用location.hash会导致地址栏的url发生变化.用户体验 ...

  10. CentOS 加载/挂载光驱

    1.mkdir /mnt/cdrom 2.mount /dev/cdrom /mnt/cdrom 3.挂载      umount /dev/cdrom /mnt/cdrom