diff options
-rwxr-xr-x[-rw-r--r--] | README | 0 | ||||
-rwxr-xr-x | SendGrid/Example/Program.cs | 3 | ||||
-rwxr-xr-x | SendGrid/SendGridMail/ISendGrid.cs | 2 | ||||
-rwxr-xr-x | SendGrid/SendGridMail/SendGrid.cs | 64 | ||||
-rwxr-xr-x | SendGrid/Tests/TestSendgridMessageSetup.cs | 120 |
5 files changed, 152 insertions, 37 deletions
diff --git a/SendGrid/Example/Program.cs b/SendGrid/Example/Program.cs index 3925174..09eaf50 100755 --- a/SendGrid/Example/Program.cs +++ b/SendGrid/Example/Program.cs @@ -17,9 +17,10 @@ namespace Example var transport = SMTP.GenerateInstance(credentials);
var header = new Header();
var message = new SendGrid(header);
- message.AddTo("tyler.bischel@sendgrid.com");
+ message.AddTo("eric.becking@sendgrid.com");
message.From = new MailAddress("eric@sendgrid.com");
message.Text = "This is a test message.";
+ message.Html = "<html><p>This is a <b>test</b> message.</p></html>";
message.Subject = "hazaah!";
transport.Deliver(message);
}
diff --git a/SendGrid/SendGridMail/ISendGrid.cs b/SendGrid/SendGridMail/ISendGrid.cs index e8e5fb2..8c07947 100755 --- a/SendGrid/SendGridMail/ISendGrid.cs +++ b/SendGrid/SendGridMail/ISendGrid.cs @@ -45,7 +45,7 @@ namespace SendGridMail void AddBcc(IEnumerable<String> addresses);
void AddBcc(IDictionary<String, IDictionary<String, String>> addresssInfo);
- void AddSubVal(String tag, String value);
+ void AddSubVal(String tag, params String[] value);
void AddAttachment(String filePath);
void AddAttachment(Attachment attachment);
diff --git a/SendGrid/SendGridMail/SendGrid.cs b/SendGrid/SendGridMail/SendGrid.cs index f70cec5..06d1eaf 100755 --- a/SendGrid/SendGridMail/SendGrid.cs +++ b/SendGrid/SendGridMail/SendGrid.cs @@ -12,12 +12,19 @@ namespace SendGridMail {
public class SendGrid : ISendGrid
{
+ #region constants/vars
+ //private/constant vars:
private Dictionary<String, String> _filters;
+ private MailMessage message;
+
+ // TODO find appropriate types for these
+ const string encoding = "quoted-printable";
+ const string charset = "utf-8";
//apps list and settings
private const String ReText = @"<\%\s*\%>";
private const String ReHtml = @"<\%\s*[^\s]+\s*\%>";
-
+ #endregion
public void InitializeFilters()
{
@@ -37,28 +44,6 @@ namespace SendGridMail };
}
- private MailMessage message;
-
- // TODO find appropriate types for these
- const string encoding = "quoted-printable";
- const string charset = "utf-8";
-
- /*
- if (Html != null )
- {
- AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, null, "text/html");
- message.AlternateViews.Add(htmlView);
- }
-
- if (Text != null )
- {
- AlternateView plainView = AlternateView.CreateAlternateViewFromString(Text, null, "text/plain");
- message.AlternateViews.Add(plainView);
- }
-
- message.BodyEncoding = Encoding.GetEncoding(charset);
- */
-
public SendGrid(MailAddress from, MailAddress[] to, MailAddress[] cc, MailAddress[] bcc,
String subject, String html, String text, TransportType transport, IHeader header = null )
{
@@ -70,8 +55,6 @@ namespace SendGridMail Cc = cc;
Bcc = bcc;
- _subs = new Dictionary<string, string>();
-
message.Subject = subject;
message.SubjectEncoding = Encoding.GetEncoding(charset);
@@ -162,10 +145,8 @@ namespace SendGridMail }
public IHeader Header { get; set; }
-
public String Html { get; set; }
public String Text { get; set; }
-
public TransportType Transport { get; set; }
#endregion
@@ -254,15 +235,13 @@ namespace SendGridMail }
}
- private Dictionary<string, string> _subs;
-
- public void AddSubVal(string tag, string value)
+ public void AddSubVal(String tag, params String[] value)
{
//let the system complain if they do something bad, since the function returns null
- _subs[tag] = value;
+ Header.AddSubVal(tag, value);
}
- public void AddAttachment(string filePath)
+ public void AddAttachment(String filePath)
{
var data = new Attachment(filePath, MediaTypeNames.Application.Octet);
message.Attachments.Add(data);
@@ -276,9 +255,10 @@ namespace SendGridMail public void AddAttachment(Stream attachment, ContentType type)
{
var data = new Attachment(attachment, type);
+ message.Attachments.Add(data);
}
- public IEnumerable<string> GetRecipients()
+ public IEnumerable<String> GetRecipients()
{
List<MailAddress> tos = message.To.ToList();
List<MailAddress> ccs = message.CC.ToList();
@@ -288,12 +268,12 @@ namespace SendGridMail return rcpts;
}
- private string Get(string field)
+ private string Get(String field)
{
throw new NotImplementedException();
}
- private void Set(string field, string value)
+ private void Set(String field, String value)
{
throw new NotImplementedException();
}
@@ -453,6 +433,20 @@ namespace SendGridMail if (!String.IsNullOrEmpty(smtpapi))
message.Headers.Add("X-SmtpApi", "{" + smtpapi + "}");
+ if (Html != null)
+ {
+ AlternateView htmlView = AlternateView.CreateAlternateViewFromString(Html, null, "text/html");
+ message.AlternateViews.Add(htmlView);
+ }
+
+ if (Text != null)
+ {
+ AlternateView plainView = AlternateView.CreateAlternateViewFromString(Text, null, "text/plain");
+ message.AlternateViews.Add(plainView);
+ }
+
+ message.BodyEncoding = Encoding.GetEncoding(charset);
+
return message;
}
diff --git a/SendGrid/Tests/TestSendgridMessageSetup.cs b/SendGrid/Tests/TestSendgridMessageSetup.cs index 6ec4d7b..2e43598 100755 --- a/SendGrid/Tests/TestSendgridMessageSetup.cs +++ b/SendGrid/Tests/TestSendgridMessageSetup.cs @@ -1,7 +1,10 @@ using System;
+using System.Collections;
using System.Collections.Generic;
using System.Linq;
+using System.Net.Mail;
using System.Text;
+using Moq;
using NUnit.Framework;
using SendGridMail;
@@ -13,7 +16,124 @@ namespace Tests [Test]
public void TestAddTo()
{
+ var foo = new Mock<IHeader>();
+ var sg = new SendGrid(foo.Object);
+ sg.AddTo("eric@sendgrid.com");
+ Assert.AreEqual("eric@sendgrid.com", sg.To.First().ToString(), "Single To Address" );
+
+ sg = new SendGrid(foo.Object);
+ var strings = new String[2];
+ strings[0] = "eric@sendgrid.com";
+ strings[1] = "tyler@sendgrid.com";
+ sg.AddTo(strings);
+ Assert.AreEqual("eric@sendgrid.com", sg.To[0].ToString(), "Multiple To addresses, check first one");
+ Assert.AreEqual("tyler@sendgrid.com", sg.To[1].ToString(), "Multiple To addresses, check second one");
+
+ sg = new SendGrid(foo.Object);
+ var a = new Dictionary<String, String>();
+ a.Add("DisplayName", "Eric");
+ var datastruct = new Dictionary<string, IDictionary<string, string>> {{"eric@sendgrid.com", a}};
+ sg.AddTo(datastruct);
+ Assert.AreEqual("Eric", sg.To.First().DisplayName, "Single address with args");
+ }
+
+ [Test]
+ public void TestAddCc()
+ {
+ var foo = new Mock<IHeader>();
+
+ var sg = new SendGrid(foo.Object);
+ sg.AddCc("eric@sendgrid.com");
+ Assert.AreEqual("eric@sendgrid.com", sg.Cc.First().ToString(), "Single CC Address");
+
+ sg = new SendGrid(foo.Object);
+ var strings = new String[2];
+ strings[0] = "eric@sendgrid.com";
+ strings[1] = "tyler@sendgrid.com";
+ sg.AddCc(strings);
+ Assert.AreEqual("eric@sendgrid.com", sg.Cc[0].ToString(), "Multiple CC addresses, check first one");
+ Assert.AreEqual("tyler@sendgrid.com", sg.Cc[1].ToString(), "Multiple CC addresses, check second one");
+
+ sg = new SendGrid(foo.Object);
+ var a = new Dictionary<String, String>();
+ a.Add("DisplayName", "Eric");
+ var datastruct = new Dictionary<string, IDictionary<string, string>> { { "eric@sendgrid.com", a } };
+ sg.AddCc(datastruct);
+ Assert.AreEqual("Eric", sg.Cc.First().DisplayName, "Single CC address with args");
+ }
+
+ [Test]
+ public void TestAddBcc()
+ {
+ var foo = new Mock<IHeader>();
+
+ var sg = new SendGrid(foo.Object);
+ sg.AddBcc("eric@sendgrid.com");
+ Assert.AreEqual("eric@sendgrid.com", sg.Bcc.First().ToString(), "Single Bcc Address");
+
+ sg = new SendGrid(foo.Object);
+ var strings = new String[2];
+ strings[0] = "eric@sendgrid.com";
+ strings[1] = "tyler@sendgrid.com";
+ sg.AddBcc(strings);
+ Assert.AreEqual("eric@sendgrid.com", sg.Bcc[0].ToString(), "Multiple addresses, check first one");
+ Assert.AreEqual("tyler@sendgrid.com", sg.Bcc[1].ToString(), "Multiple addresses, check second one");
+
+ sg = new SendGrid(foo.Object);
+ var a = new Dictionary<String, String>();
+ a.Add("DisplayName", "Eric");
+ var datastruct = new Dictionary<string, IDictionary<string, string>> { { "eric@sendgrid.com", a } };
+ sg.AddBcc(datastruct);
+ Assert.AreEqual("Eric", sg.Bcc.First().DisplayName, "Single address with args");
+ }
+
+ [Test]
+ public void TestSGHeader()
+ {
+ var foo = new Mock<IHeader>();
+ var sg = new SendGrid(foo.Object);
+
+ sg.Subject = "New Test Subject";
+ Assert.AreEqual("New Test Subject", sg.Subject, "Subject set ok");
+ sg.Subject = null;
+ Assert.AreEqual("New Test Subject", sg.Subject, "null subject does not overide previous subject");
+ }
+
+ /*
+ [Test]
+ public void TestAddSubVal()
+ {
+ var header = new Header();
+ var sg = new SendGrid(header);
+
+ var datastruct = new String[2];
+ datastruct[0] = "eric";
+ datastruct[1] = "tyler";
+
+ sg.AddSubVal("-name-", datastruct);
+ Assert.AreEqual("test", sg.Header);
+ }
+ */
+
+
+ [Test]
+ public void TestGetRcpts()
+ {
+ //public IEnumerable<String> GetRecipients()
+ var foo = new Mock<IHeader>();
+ var sg = new SendGrid(foo.Object);
+
+ sg.AddTo("eric@sendgrid.com");
+ sg.AddCc("tyler@sendgrid.com");
+ sg.AddBcc("cj@sendgrid.com");
+ sg.AddBcc("foo@sendgrid.com");
+
+ var rcpts = sg.GetRecipients();
+ Assert.AreEqual("eric@sendgrid.com", rcpts.First(), "getRecipients check To");
+ Assert.AreEqual("tyler@sendgrid.com", rcpts.Skip(1).First(), "getRecipients check Cc");
+ Assert.AreEqual("cj@sendgrid.com", rcpts.Skip(2).First(), "getRecipients check Bcc");
+ Assert.AreEqual("foo@sendgrid.com", rcpts.Skip(3).First(), "getRecipients check Bcc x2");
}
}
}
|