TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
keith.bromwich
NA
34
0
sending emails on behalf of
Feb 15 2005 1:08 AM
I am writing an email application that allows for news letter to be sent. i need to be able to set the email header so that the recipient sees emailfrom@emailaddress on behalf of
i am sending this through an smtp server. i have the emails working but i can not get the on behalf of to work. i am not using the cdosys object or the webmail object in .net but talking direct to the smtp server. does anyone know what the command is that i need to send to the server to set it so that i can? here is the class that i am using in the code i tried the sender: command but that caused an error. any thoughts or help would be appreciated. i think i missing something very simple! using System; using System.Collections; using System.Net; using System.Net.Sockets; using System.Text; namespace email { public class SmtpException : ApplicationException { public SmtpException(string message) : base(message) { } } /// /// Indicates the type of message to be sent /// public enum MessageType { /// /// The message is plain text /// Text = 0, /// /// The message is HTML /// HTML = 1 } /// /// A mail message that can be sent using the Smtp class /// public class MailMessage { private string _emailFrom = ""; public string EmailFrom { get { return _emailFrom; } set { _emailFrom = value; } } private string _emailSubject = ""; public string EmailSubject { get { return _emailSubject; } set { _emailSubject = value; } } private ArrayList _emailTo = null; public ArrayList EmailTo { get { return _emailTo; } } public void AddEmailTo(string email) { if(_emailTo == null) _emailTo = new ArrayList(); _emailTo.Add(email); } private string _emailMessage = ""; public string EmailMessage { get { return _emailMessage; } set { _emailMessage = value; } } private string _DisplayName = ""; public string DisplayName { get { return _DisplayName; } set { _DisplayName = value; } } // to be used for the on behalf of option in the email header private string _SenderName=""; public string SenderName { get {return _SenderName; } set { _SenderName = value; } } private string _SenderEmail=""; public string SenderEmail { get {return _SenderEmail; } set { _SenderEmail = value; } } private MessageType _emailMessageType = MessageType.Text; public MessageType EmailMessageType { get { return _emailMessageType; } set { _emailMessageType = value; } } } /// /// This class allows sending of e-mails through Smtp /// For help on SMTP, look up http://www.faqs.org/rfcs/rfc821.html /// public class Smtp { #region Class properties private string _serverSmtp = ""; public string SmtpServer { get { return _serverSmtp; } set { _serverSmtp = value; } } private int _portSmtp = 25; public int SmtpPort { get { return _portSmtp; } set { _portSmtp = value; } } private string _userSmtp = ""; public string SmtpUser { get { return _userSmtp; } set { _userSmtp = value; } } private string _passwordSmtp = ""; public string SmtpPassword { get { return _passwordSmtp; } set { _passwordSmtp = value; } } #endregion public Smtp() { } #region Public methods /// /// Sends the e-mail based on the properties set for this object /// public void SendEmail(MailMessage msg) { int code; if(_serverSmtp == "" || msg.EmailFrom == "" || msg.EmailSubject == "" || msg.EmailTo == null) { throw new SmtpException("Invalid Smtp or email parameters."); } // open a connection to the Smtp server using(TcpClient smtpSocket = new TcpClient(_serverSmtp, _portSmtp)) using(NetworkStream ns = smtpSocket.GetStream()) { // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 220) { throw new SmtpException("Error connecting to Smtp server. (" + code.ToString() + ")"); } // EHLO WriteBuffer(ns, "helo " + _serverSmtp + "\r\n"); // get response from Smtp server string buffer = ReadBuffer(ns); code = GetSmtpResponse(buffer); if(code != 250) { throw new SmtpException("Error initiating communication with Smtp server. (" + code.ToString() + ")"); } // check for AUTH=LOGIN if(buffer.IndexOf("AUTH=LOGIN") >= 0) { // AUTH LOGIN WriteBuffer(ns, "auth login\r\n"); // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 334) { //throw new SmtpException("Error initiating Auth=Login. (" + code.ToString() + ")"); } // username: WriteBuffer(ns, System.Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(_userSmtp)) + "\r\n"); // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 334) { //throw new SmtpException("Error setting Auth user name. (" + code.ToString() + ")"); } // password: WriteBuffer(ns, System.Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes(_passwordSmtp)) + "\r\n"); // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 235) { //throw new SmtpException("Error setting Auth password. (" + code.ToString() + ")"); } } // MAIL FROM: WriteBuffer(ns, "mail from: <" + msg.EmailFrom + ">\r\n"); // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 250) { throw new SmtpException("Error setting sender email address. (" + code.ToString() + ")"); } // WriteBuffer(ns,"Sender: <" + msg.SenderEmail + ">\r\n"); // code = GetSmtpResponse(ReadBuffer(ns)); // if(code != 250) // { // throw new SmtpException("Error setting sender email address. (" + code.ToString() + ")"); // } // RCPT TO: foreach(string sEmailTo in msg.EmailTo) { WriteBuffer(ns, "rcpt to:<" + sEmailTo + ">\r\n"); // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 250 && code != 251) { throw new SmtpException("Error setting receipient email address. (" + code.ToString() + ")"); } } // DATA WriteBuffer(ns, "data\r\n"); // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 354) { throw new SmtpException("Error starting email body. (" + code.ToString() + ")"); } // Repeat the from and to addresses in the data section WriteBuffer(ns, "from:" + msg.DisplayName + "<" + msg.EmailFrom + ">\r\n"); //WriteBuffer(ns,"Sender:" + msg.SenderName + "<" + msg.SenderEmail + ">\r\n"); foreach(string sEmailTo in msg.EmailTo) { WriteBuffer(ns, "to:<" + sEmailTo + ">\r\n"); } WriteBuffer(ns, "Date:" + DateTime.UtcNow.ToString("r") + "\r\n"); //WriteBuffer(ns, "DATA:" + "X-Mailer: Internet Mail" + "\r\n"); WriteBuffer(ns, "Subject:" + msg.EmailSubject + "\r\n"); switch(msg.EmailMessageType) { case MessageType.Text: // send text message WriteBuffer(ns, "\r\n" + msg.EmailMessage + "\r\n.\r\n"); break; case MessageType.HTML: // send HTML message WriteBuffer(ns, "MIME-Version: 1.0\r\n"); WriteBuffer(ns, "Content-type: text/html\r\n"); WriteBuffer(ns, "\r\n" + msg.EmailMessage + "\r\n.\r\n"); break; } // get response from Smtp server code = GetSmtpResponse(ReadBuffer(ns)); if(code != 250) { throw new SmtpException("Error setting email body. (" + code.ToString() + ")"); } // QUIT WriteBuffer(ns, "quit\r\n"); } } #endregion #region Private methods /// /// Looks for an Smtp response code inside a repsonse string /// /// The response string to be searched /// The int value of the Smtp reponse code private int GetSmtpResponse(string sResponse) { int response = 0; int iSpace = sResponse.IndexOf(" "); int iDash = sResponse.IndexOf("-"); if(iDash > 0 && iDash < iSpace) iSpace = sResponse.IndexOf("-"); try { if(iSpace > 0) response = int.Parse(sResponse.Substring(0, iSpace)); } catch(Exception) { // error - ignore it } return response; } /// /// Write a string to the network stream /// /// The network stream on which to write /// The string to write to the stream private void WriteBuffer(NetworkStream ns, string sBuffer) { try { byte[] buffer = Encoding.ASCII.GetBytes(sBuffer); ns.Write(buffer, 0, buffer.Length); } catch(System.IO.IOException) { // error writing to stream throw new SmtpException("Error sending data to Smtp server."); } } /// /// Reads a response from the network stream /// /// The network stream from which to read /// A string representing the reponse read private string ReadBuffer(NetworkStream ns) { byte[] buffer = new byte[1024]; int i=0; int b; int timeout = System.Environment.TickCount; try { // wait for data to show up on the stream while(!ns.DataAvailable && ((System.Environment.TickCount - timeout) < 20000)) { System.Threading.Thread.Sleep(100); } if(!ns.DataAvailable) throw new SmtpException("No response received from Smtp server."); // read while there's data on the stream while(i < buffer.Length && ns.DataAvailable) { b = ns.ReadByte(); buffer[i++] = (byte)b; } } catch(System.IO.IOException) { // error reading from stream throw new SmtpException("Error receiving data from Smtp server."); } return Encoding.ASCII.GetString(buffer); } #endregion } }
Reply
Answers (
0
)
Asynchronous Question
Deserialization throws "no top object" exception