using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
namespace SendGridMail
{
///
/// Internal object to represent the way in which email may be sent.
/// The library supports sending through either SMTP or REST interfaces.
///
public enum TransportType
{
SMTP,
REST
};
///
/// Represents the basic set of functions that will be called by the user
/// includes basic message data manipulation and filter settings
///
public interface ISendGrid
{
#region Properties
MailAddress From { get; set; }
MailAddress[] To { get; set; }
MailAddress[] Cc { get; }
MailAddress[] Bcc { get; }
MailAddress[] ReplyTo { get; set; }
Attachment[] Attachments { get; set; }
String Subject { get; set; }
Dictionary Headers { get; set; }
IHeader Header { get; set; }
String Html { get; set; }
String Text { get; set; }
TransportType Transport { get; set; }
#endregion
#region Interface for ITransport
MailMessage CreateMimeMessage();
#endregion
#region Methods for setting data
///
/// Set the To address. In this case the input is a single string eg. 'you@company.com'
///
///
void AddTo(String address);
///
/// Set the To address. In this case the expected input is a list of addresses as strings
///
///
void AddTo(IEnumerable addresses);
///
/// Set the To address. In this case the expected input is a list of addresses with paramaters.
/// The first parameter is a string for the email address.
/// The second paramater is a dictionary containing the key, value pairs for a property's name and its value.
/// Currently the only value that you can set with the MailAddress data object is the 'DisplayName' field.
///
///
void AddTo(IDictionary> addresssInfo);
///
/// Add the CC address. In this case the expected input is a single email address eg "you@company.com"
///
///
void AddCc(String address);
///
/// Set the CC address. In this case the expected input is a list of addresses as strings
///
///
void AddCc(IEnumerable addresses);
///
/// Set the CC address. In this case the expected input is a list of addresses with paramaters.
/// The first parameter is a string for the email address.
/// The second paramater is a dictionary containing the key, value pairs for a property's name and its value.
/// Currently the only value that you can set with the MailAddress data object is the 'DisplayName' field.
///
///
void AddCc(IDictionary> addresssInfo);
///
/// Set the Bcc address. Expects a single email as the input eg "you@company.com"
///
///
void AddBcc(String address);
///
/// Set the Bcc address. Expects a list of emails as an array of strings.
///
///
void AddBcc(IEnumerable addresses);
///
/// Set the Bcc address. In this case the expected input is a list of addresses with paramaters.
/// The first parameter is a string for the email address.
/// The second paramater is a dictionary containing the key, value pairs for a property's name and its value.
/// Currently the only value that you can set with the MailAddress data object is the 'DisplayName' field.
///
///
void AddBcc(IDictionary> addresssInfo);
///
/// Sets a list of substitution values for the email.
/// the 'tag' parameter is the value in the email that you'll replace eg. '-name-'
/// the 'value' parameter is a list of values that will be substituted in for the tag.
/// In our example above the list would be something like ['eric', 'tyler', 'cj'].
/// The 'value' parameter expects a 1:1 mapping from email addresses to values.
/// If you are left with more email addresses then values to substitute then the substitution tag will be left blank.
///
///
///
void AddSubVal(String tag, params String[] value);
///
/// Add an attachment to the message.
/// The 'filePath' paramater expects a fully qualified file path as a string
///
///
void AddAttachment(String filePath);
///
/// Add an attachment to the message
/// The 'attachment' paramater expects an argument of the Attachment type.
///
///
void AddAttachment(Attachment attachment);
///
/// Add an attachment to the message
/// The 'attachment' paramater expects an argument of the Attachment type.
/// The 'type' parameter expects an argument of the ContentType type.
///
///
///
void AddAttachment(Stream attachment, ContentType type);
///
/// GetRecipients returns a list of all the recepients by retrieving the to, cc, and bcc lists.
///
///
IEnumerable GetRecipients();
///
/// Add custom headers to the message
///
/// key value pairs
void AddHeaders(IDictionary headers);
#endregion
#region SMTP API Functions
void DisableGravatar();
void DisableOpenTracking();
void DisableClickTracking();
void DisableSpamCheck();
void DisableUnsubscribe();
void DisableFooter();
void DisableGoogleAnalytics();
void DisableTemplate();
void DisableBcc();
void DisableBypassListManagement();
void EnableGravatar();
void EnableOpenTracking();
void EnableClickTracking(String text = null);
void EnableSpamCheck(int score = 5, String url = null);
void EnableUnsubscribe(String text, String html, String replace, String url, String landing);
void EnableFooter(String text = null, String html = null);
void EnableGoogleAnalytics(String source, String medium, String term, String content = null, String campaign = null);
void EnableTemplate(String html = null);
void EnableBcc(String email = null);
void EnableBypassListManagement();
#endregion
void Mail();
}
}