zoukankan      html  css  js  c++  java
  • C# 批量发送文件

    前两天要求做一个批量发送邮件

    邮件内容是从excel中读取数据 然后发送

    直接贴出代码

    using HOSBS.Framework.Utility;
    using NPOI.HSSF.UserModel;
    using NPOI.XSSF.UserModel;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Net.Mail;
    using System.Net;
    using NPOI.SS.UserModel;
    using NPOI.HSSF.Util;
    using System.Drawing;
    namespace HOSBS.Web.Admin.Areas.HOS.Controllers
    {
        public class WorksController : Controller
        {
            //
            // GET: /HOS/Works/
    
            public ActionResult Index()
            {
                return View();
            }
    
            public string path = "~/exceldownload/";
            private string StorageRoot
            {
                get { return Path.Combine(Server.MapPath(path)); }
            }
            public ActionResult UploadFiles()
            {
                HttpPostedFileBase file = Request.Files["file1"];
                if (file != null)
                {
    
                    Stream streamfile = file.InputStream;
                    DataTable dt = new DataTable();
                    var houzhuiname = Path.GetExtension(file.FileName);
                    try
                    {
                        if (houzhuiname == ".xls")
                        {
                            HSSFWorkbook hssfworkbook = new HSSFWorkbook(streamfile);
                            dt = ImExport(dt, hssfworkbook);
                            GetData(dt);
                        }
                        else
                        {
                            XSSFWorkbook hssfworkbook = new XSSFWorkbook(streamfile);
                            dt = ImExport(dt, hssfworkbook);
                            GetData(dt);
                        }
                        return Json(1);
                    }
                    catch { }
                }
                return Json(0);
            }
            #region 两种不同版本的操作excel
            /// <summary>
            /// Excel2007的版本,扩展名是.xlsx
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="hssfworkbook"></param>
            /// <returns></returns>
            private static DataTable ImExport(DataTable dt, XSSFWorkbook hssfworkbook)
            {
                NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0);
                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
                {
                    //dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());]  
                    dt.Columns.Add(sheet.GetRow(0).Cells[j].ToString());
                }
                while (rows.MoveNext())
                {
                    XSSFRow row = (XSSFRow)rows.Current;
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < 19; i++)
                    {
                        NPOI.SS.UserModel.ICell cell = row.GetCell(i);
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }
                return dt;
            }
            /// <summary>
            /// Excel2003以前(包括2003)的版本
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="hssfworkbook"></param>
            /// <returns></returns>
            private static DataTable ImExport(DataTable dt, HSSFWorkbook hssfworkbook)
            {
                NPOI.SS.UserModel.ISheet sheet = hssfworkbook.GetSheetAt(0);
                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
                {
                    dt.Columns.Add(sheet.GetRow(0).Cells[j].ToString());
                    //dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
                }
                while (rows.MoveNext())
                {
                    HSSFRow row = (HSSFRow)rows.Current;
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < 19; i++)
                    {
                        NPOI.SS.UserModel.ICell cell = row.GetCell(i);
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }
                return dt;
            }
    
    
            /// <summary>
            /// 生成excel
            /// </summary>
            /// <param name="dt"></param>
            /// <returns></returns>
            public FileResult GetData(DataTable dt)
            {
                int flag = 0;
                foreach (DataRow item in dt.Rows)
                {
                    DataTable dtresult = dt.Copy();
                    dtresult.Rows.Clear();
                    flag++;
                    if (flag % 2 == 0)
                    {
                        dtresult.Rows.Add(item.ItemArray);
                        NPOI.HSSF.UserModel.HSSFWorkbook book = CreateNewBook(dtresult);
    
                        if (!Directory.Exists(StorageRoot))
                        {
                            Directory.CreateDirectory(StorageRoot);
                        }
                        string strdate = DateTime.Now.ToString("yyyyMMddhhmmssffff");//获取当前时间  
                        var path = Path.Combine(StorageRoot, strdate + "Excel.xls");
                        // 写入到客户端   
                        using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                        {
                            book.Write(fs);
                        }
                        var fullName = Path.Combine(StorageRoot, strdate);
                        SendMail(path, item[18].ToString());
                        dtresult.Rows.Clear();
                        flag = 0;
                    }
                    else
                    {
                        dtresult.Rows.Add(item.ItemArray);
                    }
                }
                return null;
    
            }
            //创建的excel文档 并且设置excel的style格式
            private static HSSFWorkbook CreateNewBook(DataTable dtresult)
            {
                //创建Excel文件的对象  
                NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                //添加一个sheet  
                NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("工资条");
                //给sheet1添加第一行的头部标题  
                NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
    
                ICellStyle style = book.CreateCellStyle();
                style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                ICellStyle style2 = book.CreateCellStyle();
                style2.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                style2.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                style2.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                style2.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                var newStyle = book.CreateCellStyle();
                newStyle.FillPattern = FillPattern.SolidForeground;
                newStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.LightYellow.Index;
                newStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                newStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                newStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                newStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                IFont font1 = book.CreateFont();
                font1.FontName = "微软雅黑";
                font1.Boldweight = (short)FontBoldWeight.Bold;
                style.SetFont(font1);
                newStyle.SetFont(font1);
                var newStyle2 = book.CreateCellStyle();
                newStyle2.FillPattern = FillPattern.SolidForeground;
                newStyle2.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.LightYellow.Index;
                newStyle2.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                newStyle2.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                newStyle2.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                newStyle2.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                //row1.RowStyle.FillBackgroundColor = "";  
                for (int i = 0; i < dtresult.Columns.Count - 1; i++)
                {
                    sheet1.SetColumnWidth(i, 25 * 150);
                    row1.CreateCell(i).SetCellValue(dtresult.Columns[i].ColumnName);
                    row1.Cells[i].CellStyle = style;
                    if (i == 17 || i == 9)
                    {
                        row1.GetCell(i).CellStyle = newStyle;
                    }
                }
                //将数据逐步写入sheet1各个行  
                for (int i = 0; i < dtresult.Rows.Count; i++)
                {
                    NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
                    for (int j = 0; j < dtresult.Columns.Count - 1; j++)
                    {
                        rowtemp.CreateCell(j).SetCellValue(dtresult.Rows[i][j].ToString().Trim());
                        rowtemp.Cells[j].CellStyle = style2;
                        if (j == 17 || j == 9)
                        {
                            rowtemp.GetCell(j).CellStyle = newStyle2;
                        }
                    }
                }
                return book;
            }
    
            /// <summary>
            /// 发送邮件
            /// </summary>
            /// <param name="datapath"></param>
            /// <param name="mailaddress"></param>
            public void SendMail(string datapath, string mailaddress)
            {
                var mailnAddress = SystemManager.ConfigInfo("mailnAddress");
                var mailPwd = SystemManager.ConfigInfo("mailPwd");
                var mainUserName = SystemManager.ConfigInfo("mainUserName");
                MailMessage mailObj = new MailMessage();
                mailObj.From = new MailAddress(mailnAddress); //发送人邮箱地址
                mailObj.To.Add(mailaddress);   //收件人邮箱地址
                mailObj.Subject = "工资条";    //主题
                mailObj.Body = "工资条";    //正文
                SmtpClient smtp = new SmtpClient();
                smtp.Host = "smtp.exmail.qq.com";         //smtp服务器名称
                smtp.UseDefaultCredentials = true;
                smtp.Credentials = new NetworkCredential(mainUserName, mailPwd);  //发送人的登录名和密码
                Attachment inline = new Attachment(datapath);
                mailObj.Attachments.Add(inline);
                smtp.Send(mailObj);
            }
    
            #endregion
        }
    }

    然后发送人的邮箱和密码就在配置文件中配置

        <!--发送人邮箱地址-->
        <add key="mailnAddress" value="*****.com"/>
        <!--发送人的登录名-->
        <add key="mainUserName" value="*****.com"/>
        <!--发送人的密码-->
        <add key="mailPwd" value="*****"/>

    获取config键值

       public static string ConfigInfo(string key)
            {
                try
                {
                    string Result =
                        ConfigurationManager.AppSettings[key].ToString();
                    if (!string.IsNullOrEmpty(Result))
                    {
                        return Result;
                    }
                }
                catch (Exception)
                {
                }
                return "";
            }
  • 相关阅读:
    [LeetCode] 64. 最小路径和 ☆☆☆(动态规划)
    [LeetCode] 62. 不同路径 ☆☆☆(动态规划)
    [LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)
    jquery validate 多种使用方式
    javascript 闭包学习
    javascript prototype学习
    jquery中event对象属性与方法小结
    html5获取地理位置信息
    thinkphp 构建子查询
    mongodb gridfs基本使用
  • 原文地址:https://www.cnblogs.com/jiangyou-lz/p/6496494.html
Copyright © 2011-2022 走看看