• 码农

    2008-03-28

    前一阵子有个需求,要求写一个群发邮件的软件。因为小弟是Web工程师(呃....自己汗一下),所以采用了asp.net 开发,实际测试中发现还真存在不少问题。
    第一,IIS有响应时间问题。
    第二,控制起来好不方便。
    So,记得姜GG写了一个PERL群发E-MAIL的代码,找来看看,没想到还发现有后续版本(python)。。用perl发一大堆邮件的一种方法。
    前面用perl写的群发邮件的脚本的python版本。 
    在自己电脑尝试装了一下PERL 2.5.8,不成,根本不会用,姜GG说你用C#写呗,俺很惭愧...答曰,没写过winForm程序...只有写一个命令行形式的垃圾邮件群发器。

    呃。。。看网上的垃圾邮件群发器都采用SMTP轮询,俺没有那么多SMTP帐号,AND 也不会装SMTP服务器,SO,写一个单一SMTP服务器的版本。

    运行环境:.Net Framework 2.0
    需要准备滴:title.txt,content.txt,list.txt 位置:C:\Mail\
                     content.txt 格式为mail@mail.com,mail2@mail.com,mail3@mail.com,
    代码:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Text.RegularExpressions;
    using System.Threading;
    namespace appMail
    {
        class Program
        {
            static void Main(string[] args)
            {
                string filepath = @"C:\Mail\list.txt";
                string titlepath = @"C:\Mail\title.txt";
                string contentpath = @"C:\Mail\Content.txt";
                StreamReader sf = new StreamReader(filepath, Encoding.Default);
                string mailList = sf.ReadToEnd();
                sf.Close();
                StreamReader sf2 = new StreamReader(titlepath, Encoding.Default);
                string title = sf2.ReadToEnd();
                sf2.Close();
                StreamReader sf3 = new StreamReader(contentpath, Encoding.Default);
                string content = sf3.ReadToEnd();
                sf3.Close();
                Console.WriteLine("输入smtp服务器,如QQ邮箱SMTP服务器为smtp.qq.com:");
                string smtpStr = Console.ReadLine();
                Console.WriteLine("邮箱名(全名):");
                string username = Console.ReadLine();
                Console.WriteLine("邮箱密码:");
                string passwd = Console.ReadLine();
                Console.WriteLine("输入间隔发送邮件数目:");
                int mSize = int.Parse(Console.ReadLine());
                Console.WriteLine("休眠时间,单位秒");
                int tempPer =int.Parse( Console.ReadLine());
                int mPer = tempPer*1000;
                string[] str = Regex.Split(mailList, ",", RegexOptions.IgnoreCase);
                int m = 1;
                foreach (string i in str)
                {
                    if (i.Trim() != "")
                    {
                        if (m % mSize  == 0)
                        {
                            if (SendMail(smtpStr, username, passwd, username, i.Trim(), title, content))
                            {
                               Console.WriteLine("第" + m + "封:" + i + "发送完成;休眠"+ mSize +"秒钟;");
                               Thread.Sleep(mPer);
                            }
                            else
                            {
                                Console.WriteLine("第" + m + "封:" + i + "发送失败;休眠" + mSize + "秒钟;");
                                Thread.Sleep(mPer);
                            }
                           
                        }
                        else
                        {
                            if (SendMail(smtpStr, username, passwd, username, i.Trim(), title, content))
                            {
                                Console.WriteLine("第" + m + "封:" + i + "发送完成;");
                            }
                            else
                            {
                                Console.WriteLine("第" + m + "封:" + i + "发送失败;");
                            }

                        }
                        m++;
                    }
               }
                Console.WriteLine("邮件发送完毕");
                Console.ReadKey();
            }
            public static Boolean  SendMail(string strSmtpServer, string UserName, string Password, string strFrom, string strto, string strSubject, string strBody)
            {
                if (Regex.IsMatch(strto, @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"))
                {
                    //生成一个   使用SMTP发送邮件的客户端对象
                    System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(strSmtpServer);

                    //表示以当前登录用户的默认凭据进行身份验证
                    client.UseDefaultCredentials = true;

                    //包含用户名和密码
                    client.Credentials = new System.Net.NetworkCredential(UserName, Password);

                    //指定如何发送电子邮件。
                    //Network        电子邮件通过网络发送到   SMTP   服务器。    
                    //PickupDirectoryFromIis               将电子邮件复制到挑选目录,然后通过本地   Internet   信息服务   (IIS)   传送。    
                    //SpecifiedPickupDirectory           将电子邮件复制到   SmtpClient.PickupDirectoryLocation   属性指定的目录,然后由外部应用程序传送。    
                    client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;

                    //建立邮件对象  
                    System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(strFrom, strto, strSubject, strBody);

                    //定义邮件正文,主题的编码方式
                    message.BodyEncoding = System.Text.Encoding.GetEncoding("gb2312");
                    message.SubjectEncoding = System.Text.Encoding.GetEncoding("gb2312");

                    //获取或设置一个值,该值指示电子邮件正文是否为   HTML。  
                    message.IsBodyHtml = true;

                    //指定邮件优先级
                    message.Priority = System.Net.Mail.MailPriority.Normal;

                    //邮件回复地址
                    //message.ReplyTo = new System.Net.Mail.MailAddress(rep);

                    //添加附件
                    //System.Web.Mail.MailAttachment   mailAttachment=new   System.Web.Mail.MailAttachment(@ "C:/Mail/附件.txt ");  
                    //if   (strFileName   !=   " "   &&   strFileName   !=   null)
                    //{
                    //        Attachment   data   =   new   Attachment(strFileName);
                    //        message.Attachments.Add(data);
                    //}
                    //发件人身份验证,否则163   发不了
                    client.Credentials = new System.Net.NetworkCredential(strFrom, Password);
                    //发送
                    try
                    {
                        client.Send(message);
                        return true;
                    }
                    catch
                    {
                        return false;
                    }
                    finally
                    {
                    }
                }
                else {
                    return false;
                }

            }
        }
    }

  • When.You.Believe

    2008-03-25

  • 赎罪

    2008-03-22

    简体中文名: 赎罪

    编剧: Ian McEwan
    导演: Joe Wright
    主演: Keira Knightley / James McAvoy / Romola Garai
    简介:
      1935年夏天,来自一个宽裕的英国小康家庭的13岁的少女布里奥妮(斯奥里兹•罗南 饰)刚刚开始尝试写作,想象力丰富。一天,她暗中发现仆人的儿子——罗比•特纳(詹姆斯•迈克沃伊 饰)和她姐姐塞西利亚(凯特•奈特莉 饰)之间有暧昧关系,而且发现他给她写了一封充满情色意味的情书。布里奥妮丰富的想象力虚构着各种可怕的事情,浮想联翩。当她的表姐罗拉被强奸后,布里奥妮相当肯定她看到是罗比做的,这次指证使罗比蒙冤入狱,留下伤心欲绝的塞西利亚。
      第二次世界大战爆发了,出狱后的罗比和塞西利亚都投入了保卫祖国的战斗,布利奥妮也成为了一名军队医务人员。经历世事之后的布里奥妮终于愧疚,主动走向罗比与塞西莉娅,为自己当年的所作所为道歉,但是无情的战争先后夺去了罗比和塞西利亚的生命,留下布里奥妮活在深深的自责中而无法赎罪。    © 豆瓣
    ----------------------------------------------------------------------------------------
    感受:文艺女青年害死人……
  • 放个假

    2008-03-22

    今天俺过生日,给自己放个小假,打了N把WAR3,哇哈哈,宝刀未老呃!
    重看一部电影《赎罪》--姜GG力荐。
    和我家娘子吃了兴隆川菜馆,水煮鱼,哇,正点!
    看了一会《深入浅出 C#》(《Head First C#》),先不说内容如何,打开看看整本书就知道,It's my style,如果你喜欢可以点击这里下载这本电子书,不过这是一个ED2K链接,迅雷和emule都能下载。

    前些天,春寒料峭,刘主任、DWJ和俺压农大的马路。那叫一个风萧萧兮吖...俺只穿了一件单衣和Jack,耍单儿了,鼻涕和唾沫在风中飞舞……谈话内容属商业机密,不便透露。嘻嘻!~~~

    刘主任的“要摇铃腰扭腰.com”在这个2008的春天悄然的消失了。怀念它,就像怀念七色光、xnovo一样,它们一样“生的伟大,死得其所”。

    过生日真好,微软也送礼物MVC开源,可以去这里下载 -- 尽管俺没碰MVC
  • 一步一步学Silverlight 2系列(1):创建一个基本的Silverlight应用

    一步一步学Silverlight 2系列(2):基本控件

    一步一步学Silverlight 2系列(3):界面布局

    一步一步学Silverlight 2系列(4):鼠标事件处理

    一步一步学Silverlight 2系列(5):实现简单的拖放功能

    一步一步学Silverlight 2系列(6):键盘事件处理

    一步一步学Silverlight 2系列(7):全屏模式支持

    一步一步学Silverlight 2系列(8):使用样式封装控件观感

    一步一步学Silverlight 2系列(9):使用控件模板

    一步一步学Silverlight 2系列(10):使用用户控件

    一步一步学Silverlight 2系列(11):数据绑定

    一步一步学Silverlight 2系列(12):数据与通信之WebClient

    一步一步学Silverlight 2系列(13):数据与通信之WebRequest

    一步一步学Silverlight 2系列(14):数据与通信之WCF

    一步一步学Silverlight 2系列(15):数据与通信之ASMX

    一步一步学Silverlight 2系列(16):数据与通信之JSON

    一步一步学Silverlight 2系列(17):数据与通信之ADO.NET Data Services

    一步一步学Silverlight 2系列(18):综合实例之RSS阅读器

    一步一步学Silverlight 2系列(19):如何在Silverlight中与HTML DOM交互(上)

    一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)

    一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    持续更新中... ...
    作者:TerryLee
    出处:http://terrylee.cnblogs.com