写了一个小程序,但是遇到了很多问题,菜鸟还需要努力!
首先是邮件发送程序:
第一步 老是报错:服务器不支持安全连接。老是认为是连接orcale出了问题,找了半天.net连接orcale字符串,改了又改,还是报错。最后百度一看,原来是sc.EnableSsl = true;这句话给惹的,我使用的139邮箱不支持这个连接方式。然后就可以发邮件了
第二步:但是又出现一个问题,前几封还可以发出去,后面就说:发送失败或者是超时。搞不清楚什么原因呢,不应该啊,后来发现是sc.TimeOut = 10;这个属性设置太小了,所以当我定时发短信时候,老是说超时,总结以上,自己太粗心了,很简单的问题,报错要仔细研究报错信息,其实都是和属性或者方法有关系的
第三步:我要把这个小程序放到服务器上,服务器报错说.net 没有合适的组件。我用的是4.0,他的却是1.0.于是下载一个4.0去装,又说服务器环境不能装4.0要配置其他组件才可以。太麻烦。于是又搞个3.5,终于装上了。把自己的用3.5又编译了一下
第四步:邮件居然没反映,也不报错,真是奇怪了,把代码拷贝其他服务器上一试OK,那就是这台机器的问题了,于是ping一下smtp.139.com,不通,原来这个机器没有开通端口,不能用139来发邮件,后来同事沟通了一下,又重新给了内网中一个可用的邮箱服务器IP
第五步:还是报错:说身份验证失败,搞了半天,怎么回事呢,原来,服务器我换掉了,发件人,以及用户名密码,还是139的,这怎么可以呢,这个问题居然忽略了!太笨了。于是又向同事要一个账户,结果因为这个邮件服务器是客户的,我们不能用,好吧,最后不发邮件了,只发短信吧。
public static void SendMail()
{
MailAddress from = new MailAddress("15280007999@139.com");
string to = "15280007999@139.com";
MailMessage message = new MailMessage();
message.From = from;
message.To.Add(to); //收件人邮箱地址可以是多个以实现群发
message.Subject = "存储过程报错";
//message.Body =GetContent("ORCL_10.210.17.55");
message.Body = "测试邮件";
message.IsBodyHtml = true; //是否为html格式
SmtpClient sc = new SmtpClient();
sc.Host = "smtp.139.com"; //指定发送邮件的服务器地址或IP
sc.EnableSsl = true;
sc.UseDefaultCredentials = false;
sc.Credentials = new System.Net.NetworkCredential("15280007999@139.com","0927"); //指定登录服务器的用户名和密码
if (message.Body!="")
{
try
{
sc.Send(message); //发送邮件
Console.WriteLine("邮件发送成功!");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
else
{
Console.WriteLine("没有报错,邮件不需要发送!");
}
}
发短信小程序:
第一步:.net连接orcale (4.0以后就不支持orcale自带的方法了。),我添加一个引用(我用的是orcale10),Oracle.DataAccess.dll,连接没问题,在自己机器上测试怎么着都不能发短信,最后发现是因为短信机被限制了,只能拿到服务器测试
第二步:拿过去报错,说缺少OraOps10.dll组件,查了半天,是因为我本机上是orcale10,但是服务器上是9,所以报错,试了很多办法,把组件拷贝到9目录下,不管用,最后发现,换个组件引用试试,就用了System.Data.OracleClient.dll,这个貌似是9的,终于不报错了,这个组件很容易就搞到,其中低版本的framework安装目录下就可以找到,应用一下就Ok
第三步:还是报错,连初始化都报错,连不上短信机,最后发现是引用的短信发送两个组件旧版本坏掉了,换了个新版本试试,OK,
第四步:配置好TNS,还是报错,说无法解析TNS,用tnsping,果然不通,但是我自己的机器是可以的啊,只是9和10的差别,然后有复制了一下,再试试就通了,太奇怪了,可能是第一次复制出错了。到此短信总算可以了。
public static void SendMessage()
{
APIClient apiclient = new APIClient();
int conn = apiclient.init("10.46.1.136","zhgj","Zhjk","hgj","mas");
Console.WriteLine(conn);
String[] tmpMobiles = new String[] {"15280007963"};
long smid = 0;
string content = GetContent("ORCL_10.210.17.55");
int sm = 1;
if (content != "")
{
sm = apiclient.sendSM(tmpMobiles, content, smid);//不带srcID的PDU短信
if (sm == 0)
{
Console.WriteLine("短信发送成功!");
}
//Console.Read();
}
else
{
Console.WriteLine("没有报错,信息不需要发送!");
}
}