本篇就最近工作解决的问题做个代码收集。包括以下几个方面:发邮件、二维码生成、文件下载、压缩、导出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 导入图片

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

最新文章

  1. mongodb
  2. java:StringBuffer字符处理对象
  3. HtmlHelper和强类型转换
  4. NVelocity模板引擎的使用
  5. Convert.ToInt32( null or &quot;&quot;)
  6. 如何写出性能好的sql
  7. android134 360 07 归属地查询
  8. 当前位置: 银光首页 &gt; WPF &gt; WPF学习教程 &gt; WPF: ShowDialog() 切换到其他应用窗口后,再切换回来无法让子窗口总在最上方
  9. 「Poetize7」足球比赛
  10. type和create type
  11. jxl创Excel档java示例代码说明
  12. IOS开发初体验
  13. javascript面向对象理解的补充
  14. puppeteer,新款headless chrome
  15. 数组copy
  16. gispro发布vectortile笔记
  17. Charles安装及配置
  18. @Transactional注解使用心得
  19. Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
  20. Spark 基础及RDD基本操作

热门文章

  1. UVALive 3971 Assemble(模拟 + 二分)
  2. Android项目总结
  3. Hibernate单向“一对多”关联
  4. mac下安装python pip、pyspider
  5. Quartz的cron表达式 (spring定时器 crontab)
  6. .net中数据缓存使用
  7. ORCAD常见DRC错误
  8. ucosii任务切换OS_TASK_SW()
  9. 请实现一个函数,把字符串中的每一个空格替换成“%20”,比如输入 “We are Happly。” 则输出“we%20are%20happy。”
  10. Intellj IDEA14.0.2启动异常之3分钟修复