网站上的邮件自动发送功能怎么实现?答者有分!
是不是要用到SMTPService?请会的人指教! 问题点数:20、回复次数:27Top
1 楼califord(远方)回复于 2006-02-03 21:06:28 得分 0
这个我也不知道,正在学呀Top
2 楼Wangzhaokang(Jerry)回复于 2006-02-03 22:40:50 得分 0
呵呵,楼上的,你真幽默!
继续请教!!!!Top
3 楼xiaostar007(你从哪里来,要到何处去)回复于 2006-02-04 09:27:56 得分 1
SMTPService当然要用了。你可以在配置文件中随便写一个么。
然后调用SmtpMail.Send(Message);就ok了Top
4 楼levin9(生活就是強姦,習慣啦就是享受)回复于 2006-02-04 09:58:02 得分 1
直接调用邮件发送程序就可以啦,有自带的邮件发送或jmailTop
5 楼Wangzhaokang(Jerry)回复于 2006-02-04 12:25:14 得分 0
脱机发送,不需要打开邮件软件(如:outlook,foxmail)
jmail是什么?Top
6 楼zy44995(zy)回复于 2006-02-07 22:59:43 得分 1
我在自己的电脑上用SMTPService发送过邮件,就不知道在电信的虚拟主机上支持该服务不?Top
7 楼likang2008(灵感)回复于 2006-02-08 02:47:16 得分 1
如果公司内部用win2000自己的SMTP的话 用System.Web.Mail,new一个MailMessage再SmtpMail.Send(Message);
一般Web用Jmail组件吧,网上说明很多。Top
8 楼zyc21st(水月邪神)回复于 2006-02-08 08:58:59 得分 5
MailMessage Message = new MailMessage();
Message.From = ConfigurationSettings.AppSettings["sendMailAddress"].ToString().Trim();
Message.To = recAddress;
Message.Subject = subject;
Message.Body = body;
Message.BodyFormat = MailFormat.Text;
SmtpMail.SmtpServer = ConfigurationSettings.AppSettings["SmtpServer"].ToString().Trim();
SmtpMail.Send(Message); Top
9 楼IS_LL(鳳翼天翔)回复于 2006-02-08 09:06:29 得分 5
using System;
using System.Web.Mail;
using System.Text;
namespace FSSoft.Common.MailUtil
{
/// <summary>
/// 提供郵件發送功能類。
/// </summary>
public sealed class MailControler
{
/// <summary>
/// 郵件發送格式枚舉。
/// </summary>
public enum TextFormat
{
/// <summary>
/// 文本格式。
/// </summary>
Text,
/// <summary>
/// HTML格式。
/// </summary>
Html
}
/// <summary>
/// 郵件優先級枚舉。
/// </summary>
public enum Priority
{
/// <summary>
/// 低級別。
/// </summary>
Low,
/// <summary>
/// 一般級別。
/// </summary>
Normal,
/// <summary>
/// 高級別。
/// </summary>
High
}
private string smtpServer = null;
private MailMessage innerMailMessage = null;
/// <summary>
/// 構造函數。
/// </summary>
public MailControler()
{
innerMailMessage = new MailMessage();
}
/// <summary>
/// 設置發件人的電子郵件地址或其他信息。
/// </summary>
public string MailFrom
{
set{innerMailMessage.From = value;}
}
/// <summary>
/// 設置以分號分隔的收件人電子郵件地址列表。
/// </summary>
public string MailTo
{
set{innerMailMessage.To = value;}
}
/// <summary>
/// 設置以分號分隔的抄送人的電子郵件地址列表。
/// </summary>
public string MailCc
{
set{innerMailMessage.Cc = value;}
}
/// <summary>
/// 設置郵件服務器地址。
/// </summary>
public string MailSmtpServer
{
set{smtpServer = value;}
}
/// <summary>
/// 設置郵件主題。
/// </summary>
public string MailHeader
{
set{innerMailMessage.Subject = value;}
}
/// <summary>
/// 設置郵件内容。
/// </summary>
public string MailBody
{
set{innerMailMessage.Body = value;}
}
/// <summary>
/// 設置郵件發送格式。
/// </summary>
public TextFormat TypeFormat
{
set
{
switch(value)
{
case TextFormat.Text:
innerMailMessage.BodyFormat=MailFormat.Text;
break;
case TextFormat.Html:
innerMailMessage.BodyFormat=MailFormat.Html;
break;
}
}
}
/// <summary>
/// 設置 Content-Base HTTP 標頭,即在HTML編碼的電子郵件正文中使用的所有相對URL的基。
/// </summary>
/// <example>MailUrlContentBase="http://www.FSSoft.com/Employees"</example>
public string MailUrlContentBase
{
set{innerMailMessage.UrlContentBase = value;}
}
/// <summary>
/// 設置電子郵件的 Content-Location HTTP 標頭。
/// </summary>
public string MailUrlContentLocation
{
set{innerMailMessage.UrlContentLocation = value;}
}
/// <summary>
/// 設置電子郵件的優先級。
/// </summary>
public Priority MailSetPriority
{
set
{
switch(value)
{
case Priority.High:
innerMailMessage.Priority=MailPriority.High;
break;
case Priority.Low:
innerMailMessage.Priority=MailPriority.Low;
break;
case Priority.Normal:
innerMailMessage.Priority=MailPriority.Normal;
break;
}
}
}
/// <summary>
/// 添加郵件附件。
/// </summary>
/// <param name="AddObject">附件對象。</param>
public void MailAttachmentAdd(object AddObject)
{
innerMailMessage.Attachments.Add(AddObject);
}
/// <summary>
/// 發送郵件。
/// </summary>
/// <returns>郵件是否發送成功。</returns>
public bool SendMail()
{
try
{
SmtpMail.SmtpServer = smtpServer;
innerMailMessage.BodyEncoding =Encoding.UTF8;
SmtpMail.Send(innerMailMessage);
return true;
}
catch(System.Web.HttpException ehttp)
{
Console.WriteLine(ehttp.Message);
return false;
}
}
}
}
Top
10 楼serverme(㊣★★★★★)回复于 2006-02-08 09:11:37 得分 5
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections;
namespace Huolx.Pubclass
{
/// <summary>
/// <para>支持SMTP服务器认证的邮件发送类</para>
/// <para></para>
/// <para>ver 1.0B</para>
/// <para>属性和方法设置类似于Jmail。</para>
/// <para></para>
/// <para>Huolx(flycloud@btamail.net.cn)版权所有,转载请保留。</para>
/// </summary>
/// <remarks>
/// <para>这是我学C#后写的第一个比较拿得出手的东西,肯定有很多错误之处,还望各位高手指正。</para>
/// <para></para>
/// <para>写它的原因就是.net自带的SmtpMail不支持SMTP认证(说句题外话,我真很奇怪,
/// 从ASP到ASP.NET,M$的邮件组件老是慢半拍,ASP中的CDONTS难得能有正常使用的,
/// 到了.NET时代,SMTP服务器基本都得验证才能用,.NET的SmtpMail又不支持验证,
/// 真是~~~),我费了好几天功夫才弄明白怎样把原来的Jmail怎么弄到.NET下用,
/// 可用起来还是比较麻烦,正好买了本《C#网络程序设计》,作为实践项目,也是为了
/// 让自己以后轻松一点,我写了这个东西。</para>
/// <para></para>
/// <para>程序架构可能有些乱,都是原来写ASP时留下的毛病,如果那位能帮我弄得整齐一点,小弟感激不尽。</para>
/// <para></para>
/// <para>欢迎大家提出修改建议,或者自行修改,最好能把修改稿Mail给我一份,让我也学习学习 ^_^。</para>
/// </remarks>
public class ESmtpMail
{
/// <summary>
/// 设定语言代码,默认设定为GB2312,如不需要可设置为""
/// </summary>
public string Charset="GB2312";
/// <summary>
/// 发件人地址
/// </summary>
public string From="";
/// <summary>
/// 发件人姓名
/// </summary>
public string FromName="";
/// <summary>
/// 回复邮件地址
/// </summary>
public string ReplyTo="";
/// <summary>
/// 邮件服务器域名
/// </summary>
private string mailserver="";
/// <summary>
/// 邮件服务器域名和验证信息
/// 形如:"user:pass@www.server.com:25",也可省略次要信息。如"user:pass@www.server.com"或"http://www.server.com/"
/// </summary>
public string MailDomain
{
set
{
string maidomain=value.Trim();
int tempint;
if(maidomain!="")
{
tempint=maidomain.IndexOf("@");
if(tempint!=-1)
{
string up=maidomain.Substring(0,tempint);
MailServerUserName=up.Substring(0,up.IndexOf(":"));
MailServerPassWord=up.Substring(up.IndexOf(":")+1,up.Length-up.IndexOf(":")-1);
string ms=maidomain.Substring(tempint+1,maidomain.Length-tempint-1);
tempint=ms.IndexOf(":");
if(tempint!=-1)
{
mailserver=ms.Substring(0,tempint);
mailserverport=System.Convert.ToInt32(ms.Substring(tempint+1,ms.Length-tempint-1));
}
}
else
{
tempint=maidomain.IndexOf(":");
if(tempint!=-1)
{
mailserver=maidomain.Substring(0,tempint);
mailserverport=System.Convert.ToInt32(maidomain.Substring(tempint+1,maidomain.Length-tempint-1));
}
else
{
mailserver=maidomain;
}
}
}
}
}
/// <summary>
/// 邮件服务器端口号
/// </summary>
private int mailserverport=25;
/// <summary>
/// 邮件服务器端口号
/// </summary>
public int MailDomainPort
{
set
{
mailserverport=value;
}
}
/// <summary>
/// 是否需要SMTP验证
/// </summary>
private bool ESmtp=false;
/// <summary>
/// SMTP认证时使用的用户名
/// </summary>
private string username="";
/// <summary>
/// SMTP认证时使用的用户名
/// </summary>
public string MailServerUserName
{
set
{
if(value.Trim()!="")
{
username=value.Trim();
ESmtp=true;
}
else
{
username="";
ESmtp=false;
}
}
}
/// <summary>
/// SMTP认证时使用的密码
/// </summary>
private string password="";
/// <summary>
/// SMTP认证时使用的密码
/// </summary>
public string MailServerPassWord
{
set
{
password=value;
}
}
/// <summary>
/// 邮件主题
/// </summary>
public string Subject="";
/// <summary>
/// 是否Html邮件
/// </summary>
public bool Html=false;
/// <summary>
/// 邮件正文
/// </summary>
public string Body="";
/// <summary>
/// 收件人列表
/// </summary>
private Hashtable Recipient=new Hashtable();
/// <summary>
/// 密送收件人列表
/// </summary>
private Hashtable RecipientBCC=new Hashtable();
/// <summary>
/// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"
/// </summary>
private string priority="Normal";
/// <summary>
/// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5"
/// </summary>
public string Priority
{
set
{
switch(value.ToLower())
{
case "high":
priority="High";
break;
case "1":
priority="High";
break;
case "normal":
priority="Normal";
break;
case "3":
priority="Normal";
break;
case "low":
priority="Low";
break;
case "5":
priority="Low";
break;
default:
priority="Normal";
break;
}
}
}
/// <summary>
/// 错误消息反馈
/// </summary>
private string errmsg;
/// <summary>
/// 错误消息反馈
/// </summary>
public string ErrorMessage
{
get
{
return errmsg;
}
}
Top
11 楼serverme(㊣★★★★★)回复于 2006-02-08 09:12:14 得分 1
/// <summary>
/// 服务器交互记录
/// </summary>
private string logs="";
/// <summary>
/// 服务器交互记录,如发现本组件不能使用的SMTP服务器,请将出错时的Logs发给我(flycloud@btamail.net.cn),我将尽快查明原因。
/// </summary>
public string Logs
{
get
{
return logs;
}
}
private string enter="\r\n";
/// <summary>
/// TcpClient对象,用于连接服务器
/// </summary>
private TcpClient tc;
/// <summary>
/// NetworkStream对象
/// </summary>
private NetworkStream ns;
/// <summary>
/// SMTP错误代码哈希表
/// </summary>
private Hashtable ErrCodeHT = new Hashtable();
/// <summary>
/// SMTP正确代码哈希表
/// </summary>
private Hashtable RightCodeHT = new Hashtable();
/// <summary>
/// SMTP回应代码哈希表
/// </summary>
private void SMTPCodeAdd()
{
ErrCodeHT.Add("500","邮箱地址错误");
ErrCodeHT.Add("501","参数格式错误");
ErrCodeHT.Add("502","命令不可实现");
ErrCodeHT.Add("503","服务器需要SMTP验证");
ErrCodeHT.Add("504","命令参数不可实现");
ErrCodeHT.Add("421","服务未就绪,关闭传输信道");
ErrCodeHT.Add("450","要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
ErrCodeHT.Add("550","要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
ErrCodeHT.Add("451","放弃要求的操作;处理过程中出错");
ErrCodeHT.Add("551","用户非本地,请尝试<forward-path>");
ErrCodeHT.Add("452","系统存储不足,要求的操作未执行");
ErrCodeHT.Add("552","过量的存储分配,要求的操作未执行");
ErrCodeHT.Add("553","邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
ErrCodeHT.Add("432","需要一个密码转换");
ErrCodeHT.Add("534","认证机制过于简单");
ErrCodeHT.Add("538","当前请求的认证机制需要加密");
ErrCodeHT.Add("454","临时认证失败");
ErrCodeHT.Add("530","需要认证");
rightcodeht.add("220","服务就绪");
RightCodeHT.Add("250","要求的邮件操作完成");
RightCodeHT.Add("251","用户非本地,将转发向<forward-path>");
RightCodeHT.Add("354","开始邮件输入,以<CRLF>.<CRLF>结束");
RightCodeHT.Add("221","服务关闭传输信道");
RightCodeHT.Add("334","服务器响应验证Base64字符串");
RightCodeHT.Add("235","验证成功");
}
/// <summary>
/// 将字符串编码为Base64字符串
/// </summary>
/// <param name="estr">要编码的字符串</param>
private string Base64Encode(string estr)
{
byte[] barray;
barray=Encoding.Default.GetBytes(estr);
return Convert.ToBase64String(barray);
}
/// <summary>
/// 将Base64字符串解码为普通字符串
/// </summary>
/// <param name="dstr">要解码的字符串</param>
private string Base64Decode(string dstr)
{
byte[] barray;
barray=Convert.FromBase64String(dstr);
return Encoding.Default.GetString(barray);
}
public ESmtpMail()
{
}
~esmtpmail()
{
}
/// <summary>
/// 收件人姓名
/// </summary>
public string RecipientName="";
private int RecipientNum=0;//收件人数量
private int RecipientBCCNum=0;//密件收件人数量
/// <summary>
/// 添加一个收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipient(string str)
{
str=str.Trim();
if(str==null||str=="http://www.aspxboy.com/private/242/'mailto:)
return true;
if(RecipientNum<10)
{
Recipient.Add(RecipientNum,str);
RecipientNum++;
return true;
}
else
{
errmsg+="收件人过多";
return false;
}
}
/// <summary>
/// 添加一组收件人(不超过10个),参数为字符串数组
/// </summary>
/// <param name="str">保存有收件人地址的字符串数组(不超过10个)</param>
public bool AddRecipient(string[] str)
{
for(int i=0;i<str.Length;i++)
{
if(!AddRecipient(str[i]))
{
return false;
}
}
return true;
}
/// <summary>
/// 添加一个密件收件人
/// </summary>
/// <param name="str">收件人地址</param>
public bool AddRecipientBCC(string str)
{
if(str==null||str.Trim()=="")
return true;
if(RecipientBCCNum<10)
{
RecipientBCC.Add(RecipientBCCNum,str);
RecipientBCCNum++;
return true;
}
else
{
errmsg+="收件人过多";
return false;
}
}
/// <summary>
/// 添加一组密件收件人(不超过10个),参数为字符串数组
/// </summary>
/// <param name="str">保存有收件人地址的字符串数组(不超过10个)</param>
public bool AddRecipientBCC(string[] str)
{
for(int i=0;i<str.Length;i++)
{
if(!AddRecipientBCC(str[i]))
{
return false;
}
}
return true;
}
/// <summary>
/// 发送SMTP命令
/// </summary>
private bool SendCommand(string Command)
{
byte[] WriteBuffer;
if(Command==null||Command.Trim()=="")
{
return true;
}
logs+=Command;
WriteBuffer = Encoding.Default.GetBytes(Command);
try
{
ns.Write(WriteBuffer,0,WriteBuffer.Length);
}
catch
{
errmsg="网络连接错误";
return false;
}
return true;
}
Top
12 楼bonnie168(虚拟过客.net)回复于 2006-02-08 09:28:29 得分 0
好象网上很多的代码没有什么用
jmail可以用一下Top
13 楼kqh0319(华仔)回复于 2006-02-08 10:41:15 得分 0
studyTop
14 楼luoyi107(想飞的鱼)回复于 2006-02-08 10:47:40 得分 0
学习.....Top
15 楼Wangzhaokang(Jerry)回复于 2006-02-08 13:18:55 得分 0
ThanksTop
16 楼Wangzhaokang(Jerry)回复于 2006-02-10 20:01:35 得分 0
继续请教!!!Top
17 楼likang2008(灵感)回复于 2006-02-13 13:14:53 得分 0
有一个开源项目OPENSMTP 你可以查一下 网上这方面的资料很多我这里就不多说了Top
18 楼huangyj(天外飞仙的师傅)回复于 2006-02-13 14:57:58 得分 0
这么好的收藏!!
Top
19 楼Wangzhaokang(Jerry)回复于 2006-02-14 09:34:50 得分 0
找了几个地址都没什么用,有谁能够提供地址,在下不胜感激!!!!
继续请教!!!Top
20 楼Wangzhaokang(Jerry)回复于 2006-02-14 10:16:36 得分 0
试了一下,报如下错误:
与服务器的传输连接失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Runtime.InteropServices.COMException: 与服务器的传输连接失败。
源错误:
行 62: Message.BodyFormat = MailFormat.Html;
行 63: SmtpMail.SmtpServer = "stmp.163.com";
行 64: SmtpMail.Send(Message);---------------->红字
行 65: }
行 66: }
是什么原因呢?Top
21 楼Wangzhaokang(Jerry)回复于 2006-02-14 13:58:34 得分 0
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", sender);
mailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "810605");
.Fields是什么用的?Top
22 楼jing_xin(我的程序人生)回复于 2006-02-14 15:11:55 得分 0
msdn上有现成的.Top
23 楼MonkWang(象写情书一样写程序)回复于 2006-02-14 15:25:10 得分 0
简单的发送邮件的类就能够实现!Top
24 楼Wangzhaokang(Jerry)回复于 2006-02-14 15:42:01 得分 0
试了一下,报如下错误:
与服务器的传输连接失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Runtime.InteropServices.COMException: 与服务器的传输连接失败。
源错误:
行 62: Message.BodyFormat = MailFormat.Html;
行 63: SmtpMail.SmtpServer = "stmp.163.com";
行 64: SmtpMail.Send(Message);---------------->红字
行 65: }
行 66: }
是什么原因呢?
Top
25 楼iceblue2005gather(美丽心情)回复于 2006-02-14 17:11:14 得分 0
马上要写了,关注!^6^
Top
26 楼hymxtang(书童)回复于 2006-02-14 17:52:00 得分 0
学习~Top
27 楼Wangzhaokang(Jerry)回复于 2006-02-15 20:55:18 得分 0
继续请教!!!!Top




