怎样截获或改变发送邮件的目的地
我现在维护一个学习网站。数据库表有管理员表,老师表和学生表;每个管理员管理若干个老师,每个老师管理若干个学生。每个表里都有的字段包括ID,姓名、邮件地址等。
网站有个功能是发送邮件。项目里有一个类email.vb,里边有各种方法来实现定义好的邮件格式和内容。比如说管理员给老师安排一个新学生,要给老师和学生同时发一个email,老师可以给所有他的学生发email,等等。
这个网站还有一个开发测试环境(包括测试数据库)。为了方便我把所有的老师和学生的邮件地址改成了我自己的邮箱。我又新建个测试网页,上面加了很多按钮,每个按钮调用一个发送邮件的方法。这样如果领导想改变某个邮件的格式或内容,我只要运行这个网页就能在自己的邮箱收到测试的邮件,而不会打扰老师或学生。
问题:我们老板看这个测试功能不错,他也想试试。请问各位大侠,怎样建一个网页,调用发邮件的方法,但是邮件发送到他的邮箱(而不是我的邮箱)?
注:不能通过修改调用参数的方法修改邮箱,因为有的邮箱得从数据库里读出来(是我的或另外一个程序员的邮箱)。
感谢各位的帮忙!
email
[解决办法]
通过描述觉得你的设计有问题。为什么设置成你的邮箱可以全部接收?然后不能再设置成你老板的么?邮件批量发送应该有个发送方和接收方吧。你的接收方咋就不能做个通用的配置呢,或者做一个接收方的配置页,你把所有的接收方配置到一个表里。用谁的时候直接调出来不就行了么
[解决办法]
这种东西不应该写死的,方法体可以写的通用,但是关键的一些参数应该用xml去配置,再去读取,修改的时候方便的很。关于发送邮件,vb我可不会,发一个c#的:
/// <summary>
/// .net邮件发送程
/// </summary>
public class MailMessage
{
private string _subject;
private string _body;
private string _from;
private string _fromName;
private string _recipientName;
private string _mailDomain;
private int _mailserverport;
private string _username;
private string _password;
private bool _html;
private string _recipient;
private string _attachMentPath;
private Dictionary<string, string> dic;
/// <summary>
/// 构造函数
/// </summary>
public MailMessage()
{
dic = JONcms.Common.config.SystemStatusHelper.GetSiteConfig(true);
this._username = dic["emailusername"];
this._password = dic["emailpassword"];
this._mailDomain = dic["emailstmp"];
this._mailserverport = int.Parse(dic["emailport"]);
}
/// <summary>
/// 邮件主题
/// </summary>
public string Subject
{
get { return this._subject; }
set { this._subject = value; }
}
/// <summary>
/// 邮件正文
/// </summary>
public string Body
{
get { return this._body; }
set { this._body = value; }
}
/// <summary>
/// 发件人地址
/// </summary>
public string From
{
get { return _from; }
set { this._from = value; }
}
/// <summary>
/// 发件人姓名
/// </summary>
public string FromName
{
get { return this._fromName; }
set { this._fromName = value; }
}
/// <summary>
/// 收件人姓名
/// </summary>
public string RecipientName
{
get { return this._recipientName; }
set { this._recipientName = value; }
}
/// <summary>
/// 邮箱域
/// </summary>
public string MailDomain
{
get { return this._mailDomain; }
set { this._mailDomain = value; }
}
/// <summary>
/// 邮件服务器端口号
/// </summary>
public int MailDomainPort
{
set { this._mailserverport = value; }
get { return this._mailserverport; }
}
/// <summary>
/// SMTP认证时使用的用户名
/// </summary>
public string MailServerUserName
{
set { this._username = value.Trim() != "" ? value.Trim() : ""; }
get { return _username; }
}
/// <summary>
/// SMTP认证时使用的密码
/// </summary>
public string MailServerPassWord
{
set { this._password = value; }
get { return _password; }
}
/// <summary>
/// 是否Html邮件
/// </summary>
public bool Html
{
get { return this._html; }
set { this._html = value; }
}
/// <summary>
/// 收件人的邮箱地址
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public bool AddRecipient(params string[] username)
{
this._recipient = username[0].Trim();
return true;
}
/// <summary>
/// 多个附件路径以分号隔开
/// </summary>
public string AttachMentPath
{
get { return this._attachMentPath; }
set { this._attachMentPath = value; }
}
/// <summary>
/// 发送
/// </summary>
/// <returns></returns>
public bool Send()
{
System.Net.Mail.MailMessage myEmail = new System.Net.Mail.MailMessage();
Encoding eEncod = Encoding.GetEncoding("utf-8");
myEmail.From = new System.Net.Mail.MailAddress(this.From, this.Subject, eEncod);
myEmail.To.Add(this._recipient);
myEmail.Subject = this.Subject;
myEmail.IsBodyHtml = true;
myEmail.Body = this.Body;
myEmail.Priority = System.Net.Mail.MailPriority.Normal;
myEmail.BodyEncoding = Encoding.GetEncoding("utf-8");
if (!string.IsNullOrEmpty(this.AttachMentPath))
{
string[] arrAttach = this.AttachMentPath.Split(';');
for (int i = 0; i < arrAttach.Length; i++)
{
System.Net.Mail.Attachment mailAttach = new System.Net.Mail.Attachment(arrAttach[i]);
myEmail.Attachments.Add(mailAttach);
}
}
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
smtp.Host = this.MailDomain;
smtp.Port = this.MailDomainPort;
smtp.Credentials = new System.Net.NetworkCredential(this.MailServerUserName, this.MailServerPassWord);
//当不是25端口(gmail:587)
if (this.MailDomainPort != 25)
{
smtp.EnableSsl = true;
}
try
{
smtp.Send(myEmail);
}
catch (System.Net.Mail.SmtpException e)
{
return false;
}
return true;
}
}
[解决办法]
你的邮件地址用参数形式不是可以了么?
调用的时候传入是什么地址就发送什么地址。
测试时候传入测试邮件地址即可。
[解决办法]
可以发你为什么不能发老板=、=
[解决办法]
3楼的好!1