📄 newsletter.cs
字号:
using System;
using System.Data;
using System.Data.SqlClient;
// add a reference to System.Web assembly
using System.Web;
using System.Web.Mail;
namespace Wrox.WebModules.MailingLists.Business
{
public class Newsletter : Wrox.WebModules.Business.BizObject
{
private Configuration.ModuleSettings settings;
private int newsletterID;
private int listID;
private string subject;
private string body;
private bool isHTML;
private DateTime sentDate;
// constructors
public Newsletter()
{
settings = Configuration.ModuleConfig.GetSettings();
ResetProperties();
}
public Newsletter(int existingNewsletterID)
{
settings = Configuration.ModuleConfig.GetSettings();
newsletterID = existingNewsletterID;
LoadFromID();
}
public Newsletter(Newsletter existingNewsletter)
{
settings = Configuration.ModuleConfig.GetSettings();
newsletterID = existingNewsletter.ID;
LoadFromID();
}
// retrieve the values for the properties
private void LoadFromID()
{
Data.Newsletters newsletters = new Data.Newsletters(settings.ConnectionString);
Data.NewsletterDetails details = newsletters.GetDetails(newsletterID);
newsletterID = details.NewsletterID;
listID = details.ListID;
subject = details.Subject;
body = details.Body;
isHTML = details.IsHTML;
sentDate = details.SentDate;
}
public int LoadFromID(int existingNewsletterID)
{
newsletterID = existingNewsletterID;
LoadFromID();
return newsletterID;
}
// reset the properties
private void ResetProperties()
{
newsletterID = -1;
listID = -1;
subject = "";
body = "";
isHTML = false;
sentDate = new DateTime();
}
// delete the record represented by this object
public bool Delete()
{
Data.Newsletters newsletters = new Data.Newsletters(settings.ConnectionString);
bool ret = newsletters.Delete(newsletterID);
ResetProperties();
return ret;
}
// send a newsletter to the specified list, and return the ID of the new record
public int Send(int newsletterListID, string newsletterSubject, string newsletterBody,
bool newsletterIsHTML, MailPriority priority, bool saveToDB, out int totalNewsletters)
{
// reset the ID of the newsletter identifies by this object
newsletterID = -1;
// replace the list's tags in the subject
newsletterSubject = Helper.ProcessListTags(newsletterSubject, newsletterListID);
// replace the list's and settings' tags in the body
newsletterBody = Helper.ProcessListTags(newsletterBody, newsletterListID);
newsletterBody = Helper.ProcessSettingsTags(newsletterBody);
// add a new record in the newsletters archive, if required
if (saveToDB)
{
Data.Newsletters news = new Data.Newsletters(settings.ConnectionString);
newsletterID = news.Add(newsletterListID, newsletterSubject, newsletterBody, newsletterIsHTML);
}
// create a new mail message and set the common properties
MailMessage mailMsg = new MailMessage();
mailMsg.From = settings.SenderName + " <" + settings.SenderEmail + ">";
mailMsg.Priority = priority;
mailMsg.BodyFormat = (MailFormat)Convert.ToInt16(newsletterIsHTML);
mailMsg.Subject = newsletterSubject;
// get all the active subscribers of this list
DataTable dt = new Business.List(newsletterListID).GetSubscriptions(true).Tables[0];
for(int i = 0; i < dt.DefaultView.Count; i++)
{
// replace the subscriber's special tags with their values
mailMsg.To = (string)dt.DefaultView[i]["Email"];
mailMsg.Body = Helper.ProcessSubscriptionTags(newsletterBody,
(int)dt.DefaultView[i]["SubscriptionID"]);
// send the mail to this subscriber
SmtpMail.Send(mailMsg);
}
// load the data for the sent newsletter in the current object
if (newsletterID != -1)
LoadFromID();
else
ResetProperties();
// return the number of sent newsletters through an output parameter
totalNewsletters = dt.DefaultView.Count;
// return the ID of the newsletter added to the archive, or -1 if it has not been added
return newsletterID;
}
// overloaded version of the above one, without the output parameter
public int Send(int newsletterListID, string newsletterSubject, string newsletterBody,
bool newsletterIsHTML, MailPriority priority, bool saveToDB)
{
int totalNewsletters;
return Send(newsletterListID, newsletterSubject, newsletterBody,
newsletterIsHTML, priority, saveToDB, out totalNewsletters);
}
// PROPERTIES DEFINED BELOW
public int ID
{
get { return newsletterID; }
}
public int ListID
{
get { return listID; }
}
public Business.List List
{
get { return new List(listID); }
}
public string Subject
{
get { return subject; }
}
public string Body
{
get { return body; }
}
public bool IsHTML
{
get { return isHTML; }
}
public DateTime SentDate
{
get { return sentDate; }
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -