public static bool Send(MailMessage message) { IPHostEntry IPhst = Dns.GetHostEntry(SmtpServer); IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], SmtpPort); Socket s = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp); Console.WriteLine("connecting.........."); s.Connect(endPt); Console.WriteLine("connected........"); string msg = ""; msg = msg + message.From + "\n"; msg = msg + message.To + "\n"; msg = msg + message.Subject + "\n"; int attch_count = 0; if (message.Attachments.Count > 0) { attch_count = message.Attachments.Count; } msg = msg + attch_count + "\n"; if (attch_count > 0) { foreach (object o in message.Attachments) { MailAttachment a = o as MailAttachment; //int pos = a.Filename.LastIndexOf('\\'); char[] delim = new char[1]; delim[0] = '\\'; string[] nameParts = a.Filename.Split(delim); //nt count = a.Filename.Length - (pos+1); //msg = msg + a.Filename.Substring(pos+1, count) + "\n"; string filename = nameParts[nameParts.Length - 1]; filename = Path.GetFileName(a.Filename); msg = msg + filename + "\n"; } } msg = msg + message.Body; Senddata(s, msg, false); if (Check_Response(s, SMTPResponse.MSGLEN_SUCCESS)) { //MessageBox.Show("length acked"); } if (message.Attachments.Count > 0) { foreach (object o in message.Attachments) { MailAttachment a = o as MailAttachment; byte[] binaryData; if (a != null) { FileInfo f = new FileInfo(a.Filename); FileStream fs = f.OpenRead(); int chunksize = 600000; for (int j = 0; j < fs.Length; j = j + chunksize) { int count = chunksize; if ((j + count) > fs.Length) { count = (int)(fs.Length - (long)j); } int bytesRead = 0; binaryData = null; binaryData = new Byte[count]; fs.Seek((long)j, SeekOrigin.Begin); while (bytesRead < count) { int bRead = fs.Read(binaryData, bytesRead, count - bytesRead); bytesRead = bytesRead + bRead; } string base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length); SendMsgPart(s, base64String); } SendMsgPart(s, "__done__"); fs.Close(); } } } return(true); }
private void cmdSend_Click(object sender, EventArgs e) { SMTP.SmtpDirect.SmtpServer= "10.108.7.138"; SMTP.SmtpDirect.SmtpServer = txtSmtp.Text; SMTP.SmtpDirect.SmtpPort = Int32.Parse(txtPort.Text); MailMessage message =new MailMessage(); message.Body = txtBody.Text; message.From = txtFrom.Text; message.To = txtTo.Text; message.Subject = txtSubject.Text; if (txtAttachment.Text != "") { MailAttachment attachment = new MailAttachment(txtAttachment.Text); message.Attachments.Add(attachment); } if(SMTP.SmtpDirect.Send(message)) { MessageBox.Show("Sent OK"); } else { MessageBox.Show("Something BAD Happened!"); } txtTo.Text = ""; txtFrom.Text = ""; txtSubject.Text = ""; txtAttachment.Text = ""; txtSmtp.Text = ""; txtPort.Text = ""; txtBody.Text = ""; }
public static bool Send(MailMessage message) { IPHostEntry IPhst = Dns.Resolve(SmtpServer); IPEndPoint endPt = new IPEndPoint(IPhst.AddressList[0], 25); Socket s = new Socket(endPt.AddressFamily, SocketType.Stream, ProtocolType.Tcp); s.Connect(endPt); if (!Check_Response(s, SMTPResponse.CONNECT_SUCCESS)) { s.Close(); return(false); } Senddata(s, string.Format("HELO {0}\r\n", Dns.GetHostName())); if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) { s.Close(); return(false); } Senddata(s, string.Format("MAIL From: {0}\r\n", message.From)); if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) { s.Close(); return(false); } string _To = message.To; string[] Tos = _To.Split(new char[] { ';' }); foreach (string To in Tos) { Senddata(s, string.Format("RCPT TO: {0}\r\n", To)); if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) { s.Close(); return(false); } } if (message.Cc != null) { Tos = message.Cc.Split(new char[] { ';' }); foreach (string To in Tos) { Senddata(s, string.Format("RCPT TO: {0}\r\n", To)); if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) { s.Close(); return(false); } } } StringBuilder Header = new StringBuilder(); Header.Append("From: " + message.From + "\r\n"); Tos = message.To.Split(new char[] { ';' }); Header.Append("To: "); for (int i = 0; i < Tos.Length; i++) { Header.Append(i > 0 ? "," : ""); Header.Append(Tos[i]); } Header.Append("\r\n"); if (message.Cc != null) { Tos = message.Cc.Split(new char[] { ';' }); Header.Append("Cc: "); for (int i = 0; i < Tos.Length; i++) { Header.Append(i > 0 ? "," : ""); Header.Append(Tos[i]); } Header.Append("\r\n"); } Header.Append("Date: "); Header.Append(DateTime.Now.ToString("ddd, d MMM yyyy H:m:s z")); Header.Append("\r\n"); Header.Append("Subject: " + message.Subject + "\r\n"); Header.Append("X-Mailer: SMTPDirect v1\r\n"); string importance = null; if (message.Priority == MailPriority.High) { importance = "high"; } else if (message.Priority == MailPriority.Low) { importance = "low"; } if (importance != null) { Header.Append("Importance: " + importance + "\r\n"); } string MsgBody = message.Body; if (!MsgBody.EndsWith("\r\n")) { MsgBody += "\r\n"; } if (message.Attachments.Count > 0 || message.BodyFormat == MailFormat.Html) { Header.Append("MIME-Version: 1.0\r\n"); Header.Append("Content-Type: multipart/mixed; boundary=unique-boundary-1\r\n"); Header.Append("\r\n"); Header.Append("This is a multi-part message in MIME format.\r\n"); StringBuilder sb = new StringBuilder(); sb.Append("--unique-boundary-1\r\n"); string type = message.BodyFormat == MailFormat.Text ? "plain" : "html"; sb.Append(string.Format("Content-Type: text/{0}\r\n", type)); sb.Append("Content-Transfer-Encoding: 7Bit\r\n"); sb.Append("\r\n"); sb.Append(MsgBody + "\r\n"); sb.Append("\r\n"); foreach (object o in message.Attachments) { MailAttachment a = o as MailAttachment; byte[] binaryData; if (a != null) { FileInfo f = new FileInfo(a.Filename); sb.Append("--unique-boundary-1\r\n"); sb.Append("Content-Type: application/octet-stream; file=" + f.Name + "\r\n"); sb.Append("Content-Transfer-Encoding: base64\r\n"); sb.Append("Content-Disposition: attachment; filename=" + f.Name + "\r\n"); sb.Append("\r\n"); FileStream fs = f.OpenRead(); binaryData = new Byte[fs.Length]; long bytesRead = fs.Read(binaryData, 0, (int)fs.Length); fs.Close(); string base64String = Convert.ToBase64String(binaryData, 0, binaryData.Length); for (int i = 0; i < base64String.Length;) { int nextchunk = 100; if (base64String.Length - (i + nextchunk) < 0) { nextchunk = base64String.Length - i; } sb.Append(base64String.Substring(i, nextchunk)); sb.Append("\r\n"); i += nextchunk; } sb.Append("\r\n"); } } MsgBody = sb.ToString(); } Senddata(s, ("DATA\r\n")); if (!Check_Response(s, SMTPResponse.DATA_SUCCESS)) { s.Close(); return(false); } Header.Append("\r\n"); Header.Append(MsgBody); Header.Append(".\r\n"); Header.Append("\r\n"); Header.Append("\r\n"); Senddata(s, Header.ToString()); if (!Check_Response(s, SMTPResponse.GENERIC_SUCCESS)) { s.Close(); return(false); } Senddata(s, "QUIT\r\n"); Check_Response(s, SMTPResponse.QUIT_SUCCESS); s.Close(); return(true); }