【问题标题】:Sending mails automatically by console application通过控制台应用程序自动发送邮件
【发布时间】:2015-06-26 07:13:32
【问题描述】:

创建一个控制台应用程序,用于为公司员工发送生日祝福邮件,这里有我尝试仅发送一位员工的邮件代码,但无法从数据库中获取多个电子邮件 ID

这里的代码我试试:

class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connStr = ConfigurationManager.ConnectionStrings["EmpDBConnectionString"].ConnectionString;
                SqlConnection con = new SqlConnection(connStr);
                con.Open();
                SqlCommand cmd;
                cmd = new SqlCommand("SELECT empemail,EmpDOB,empname,Photo,BdayMessage,CC FROM EmpDetails where datepart(day,EmpDOB)= datepart(day,sysdatetime()) and datepart(month,EmpDOB)=datepart(month,sysdatetime())", con);
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.HasRows)
                {
                    ArrayList list_emails = new ArrayList();
                    int i = 0;
                    string email, Bday;
                    int diff;
                    while (reader.Read())
                    {
                        email = reader.GetValue(i).ToString();
                        list_emails.Add(email); //Add email to a arraylist
                        i = i + 1 - 1;
                    }
                        string todaydate = DateTime.Now.ToString("dd/MM");
                        Bday = Convert.ToDateTime(reader["EmpDOB"]).ToString("dd/MM");         //date converted 
                        diff = DateTime.Compare(DateTime.Today, Convert.ToDateTime(Bday));     //compare cuurent date and date of birthday from database of emplyees with only day and month

                        //string Bday = Convert.ToDateTime(reader["EmpDOB"]).ToString("dd/MM");

                        if (diff == 0)
                        {
                            //string Email = reader["EmpEmail"].ToString();
                            string Name = reader["EmpName"].ToString();
                            string Photo = reader["Photo"].ToString();
                            string cc = reader["CC"].ToString();
                            string Bdaymessage = reader["BdayMessage"].ToString();
                            string body = "<br><b><i><font Size=4 face=Comic Sans MS color= #FF2B9E> Dear</br><br><font Size=4 face=Comic Sans MS color=#FF2B9E>" + Name + "</i></b>" + "<br>" + "<br><img src=" + Photo + "></body></html></body></html>" + "<br><b><font Size=4 face=Comic Sans MS color=#FF2B9E><i>" + Bdaymessage + "</i></b></br> " + "<br><br><br>";
                            AlternateView av = AlternateView.CreateAlternateViewFromString(body, null, System.Net.Mime.MediaTypeNames.Text.Html);

                            LinkedResource inline = new LinkedResource(Photo, MediaTypeNames.Image.Jpeg);
                            inline.ContentId = Guid.NewGuid().ToString();
                            av.LinkedResources.Add(inline);

                            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

                            msg.AlternateViews.Add(av);
                            //msg.To.Add(email);
                            msg.CC.Add(cc);
                            msg.Subject = " WIsH YoU MaNy MaNY HaPPy Birthday";
                            msg.From = new System.Net.Mail.MailAddress("example@gmail.com");
                            SmtpClient mailClient = new SmtpClient("smtp.gmail.com", 587);
                            NetworkCredential NetCrd = new NetworkCredential("eample@gmail.com", "password");
                            mailClient.UseDefaultCredentials = false;
                            mailClient.Credentials = NetCrd;
                            mailClient.EnableSsl = true;
                            mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                            mailClient.Send(msg);
                            reader.Close();
                            con.Close();
                        }
                        else
                        {
                            Console.Write("its a earlier date");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Write("There is No Birthday" + ex);
            }
        }
    }

【问题讨论】:

  • 好的,非常感谢

标签: c# email console


【解决方案1】:

您将在 while 循环中使用 DataReader 从数据库中获取多个用户。您只需将电子邮件发送代码移动到循环内即可。

【讨论】:

  • 那么如何从数据库中获取多个电子邮件ID?.......当执行此代码时,在获取多个电子邮件ID的表单数据库时,i = i + 1-1中的计数为2;
  • 实际上他试图将检索到的电子邮件地址放入一个列表中 - 问题是从他的 DataReader 访问右列:i = i + 1 - 1; 修改列索引肯定不会产生所需的输出。
  • 是的..他是对的,我将电子邮件地址检索到 ArrayList list_emails = new ArrayList();我 = 我 + 1 -1;执行此代码后,此计数为 2。它从数据库中获取 2 个电子邮件地址,但在 while 循环跳转 Bday 日期后显示错误“无数据时读取尝试无效”
【解决方案2】:

我建议您将人口报告(姓名、生日、受雇日期、电子邮件)提取为 excel 并让wishing application 处理所有事情

至少它只需要两件事 excel 文件 以及希望的详细信息(日期、姓名、电子邮件)和一个配置文件(application.properties),仅此而已,你可以走了。

还有各种options to run 本地应用程序(命令行、前台、后台、docker、windows 调度程序、unix cron 等)云。

应用程序是highly configurable,您可以配置各种详细信息,例如:

  • 工作簿加载选项
  • 带有愿望的图片选项。
  • SMTP 配置
  • 其他应用程序级别的配置,如何时发送愿望、迟来的愿望、日志记录等。

    免责声明:我是应用程序的所有者

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2013-09-10
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多