Artech

Develop every application as an art using the most suitable technologies!

常用链接

统计

积分与排名

CnBlogs

专家的Blog|主页

最新评论

[原创]在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail

在项目开发中,发送邮件时一种非常常见的功能。一般的情况下,大型的公司都有自己的邮件系统,我们可以直接通过公司的Pop/SMTP Server进行邮件的发送和接收。不过,对于一些小公司不具有这样的条件,他们一般通过一些公共的邮件服务通过商提供的邮件服务。比如Sina,163就是很好的、常用的邮件服务。不过相比之下,我还是习惯使用Google Gmail。

接下来,我将介绍两方面来介绍今天的内容,如果通过Managed code通过Gmail进行邮件的发送,以及如何在Outlook中配置Gmail。今天介绍的东西和技术不是很沾边。只是觉得具有一定的实用性,同时介绍一下我在使用过程遇到的一些问题,希望给大家在使用过程中提供一些参考。

一、在Managed code中通过Gmail发送邮件

我们知道,SMTP是我们最常用的邮件传输的协议。通过SMTP方式,我们只需要配置相应的STMP Server和Port,使用我们的帐号和密码登录到STMP Server,理论上我们就可以进行邮件的发送了。对于Google Gmail,对应的信息如下:

Pop3 Server (Port: 995) :pop.gmail.com, SSL

SMTP Server (Port: 25, 465, 587):smtp.gmail.com, TLS

你通过你注册的Gmail帐号和密码就可以登录smtp.gmail.com。下面是一段简单的C# Code。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace Artech.Mail.ConsoleApp
{
    
class Program
    
{
        
const string ADDRESS_FROM = "from@gail.com";
        
const string ADDRESS_TO = "to@gmail.com";
        
const string USER_ID = "MyAccount";
        
const string PASSWORD = "password";
        
const string SMTP_SERVER = "smtp.gmail.com";
        
const int PORT = 587;

        
static void Main(string[] args)
        
{
                SendMail(SMTP_SERVER, PORT);
                Console.Read();        
           
        }


        
static void SendMail(string smtpServer, int port)
        
{
            SmtpClient mailClient 
= new SmtpClient(smtpServer, 587);
            mailClient.EnableSsl 
= true;
            NetworkCredential crendetial 
= new NetworkCredential(USER_ID, PASSWORD);
            mailClient.Credentials 
= crendetial;
            MailMessage message 
= new MailMessage(ADDRESS_FROM, ADDRESS_TO, "This is a subject""This is the body of the mail");
           
            mailClient.Send(message);
            Console.WriteLine(
"Mail has been sent to '{0}'", ADDRESS_TO);
        }

    }

}

熟悉System.Net.Mail. SmtpClient,对上面的Code应该是很熟悉了,在这里我就不想对上面的逻辑多做介绍了。不过我需要补充几点的是:

1.通过Gmail,你只能以你登录到SMTP Server的Account的名义对外发信,以上面为例,我以” MyAccount”最为Gmail的Account登录,向Email address 为to@gmail.com发送邮件,虽然在SmtpClient.Send方法中的我指定的From address为from@gail.com,当收信人受到该邮件的时候,邮件的发件人是MyAccount@gail.com,不会为from@gail.com。这些很有必要的,可以防止你利用别人的名义发送邮件。这种机制并不是通用的,我就和同事开过这样的玩笑:通过公司的STMP Server以另一个同事的名义向他发邮件。

2.虽然Google对外宣称他们开发的SMTP Server的Port为25,465和587,但是在代码中,我使用25和587一切正常,当时当我使用465的时候,怎么也发不出去。但是当我在Outlook中把Port配置为465的时候,发送邮件也正常。我还没来得及查阅到底是什么问题。知道原因的朋友,请不吝赐教。

3.对于像这种邮件服务功能的代码,我们一般写成可配置的。因为对于对于帐户和密码,甚至是STMP Server,都有可能经常的变换。但是我们不用通过常用的<AppSettings>来配置,也不用定义我们的Custom ConfigurationSection。因为Configuration System已经为我们定义的内置的<mailSettings>来配置邮件相关的信息。比如:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<system.net>
    
<mailSettings>
      
<smtp from="MyAccount@gmail.com">
        
<network host="smtp.gmail.com"
                 password
="password"
                 port
="587"
                 userName
=" MyAccount @gmail.com"/>
      
</smtp>
    
</mailSettings>
  
</system.net>
</configuration>

对于Gmail,from实际上没有什么意义。

现在我们就可以进一步地简化我们的Managed code了:

static void SendMail()
        
{
            SmtpClient mailClient 
= new SmtpClient();
            mailClient.EnableSsl 
= true;
            MailMessage message 
= new MailMessage(ADDRESS_FROM, ADDRESS_TO, "This is a subject""This is the body of the mail");

            mailClient.Send(message);
            Console.WriteLine(
"Mail has been sent to '{0}'", ADDRESS_TO);
        }

二、通过Outlook来配置Gmail

Outlook作为专业的邮件管理的办公软件,为我们进行邮件的接收和发送、以及邮件的管理提供了极大的便利。下面我来简单介绍一下如何通过Outlook来配置Gmail。

1.登录Gmail,通过Settings Navigator进行Gmail的设置。


2.选择”Forwarding and POP” Tab中选中Enable POP for all mail (even mail that's already been downloaded) 选项。


3. 在Outlook中,通过Tools->Options->Mail Setup->Email accounts进入Account Setting对话框。如果你已经有了一个Account,那么在第一个tab “Email”中更新的该Account。进行如下设置。如果你需要新创建一个account, 请直接到Step6。

4. Click “More Setting”,弹出”Internet E-mail setting”对话框,选择”Advance” Table,进行如下设置:


5. 选择”Outgoing Server” Tab,做如下设置

6. Account Setting对话框中Click "new..."按钮,就如"Add New Email Account"对话框,选择第一个选项。

7.Click “Next”,选择"Manually cinfigure server seetings or additional server types" Check Box.

8. Click “Next”,选择第一个选项"Internet E-Mail",接下来的配置就和上面一样了。


posted on 2007-05-16 01:48 Artech 阅读(4323) 评论(21)  编辑 收藏 所属分类: 杂家杂谈

评论

#1楼  2007-05-16 02:04 Jeffrey Zhao      

现在Gmail不用邀请了,呵呵。   回复  引用  查看    

#2楼 [楼主] 2007-05-16 02:09 Artech      

@Jeffrey Zhao
哦,看来我老土了,呵呵。我把那句话删掉了。

原来老赵也是夜猫子呀。   回复  引用  查看    

#3楼  2007-05-16 02:17 Jeffrey Zhao      

@Artech
我是绝对的夜猫子阿,每天都要到3点左右才睡。:)   回复  引用  查看    

#4楼  2007-05-16 08:35 风过无痕 [未注册用户]

我现在在做 一个题目是(基于VB开发的C/S模式的 局域网屏幕抓取),求大虾们给予指导呀!   回复  引用    

#5楼  2007-05-16 08:37 风过无痕 [未注册用户]

能帮我忙的请联系我,E-mail:zhizaojishu-02@asahisz.com.cn
hongbin19831203@163.com(首选油箱)
  回复  引用    

#6楼  2007-05-16 08:54 晓木      

受用了,现在的项目中正需要这个..

BTW:
const string ADDRESS_FROM = "from@gail.com";

在g和a之间貌似漏了一个 m   回复  引用  查看    

#7楼  2007-05-16 08:54 ddr888      

博客园里是不是都用传说中的vista了?(我还是xp...)   回复  引用  查看    

#8楼  2007-05-16 09:11 go9wing精灵 [未注册用户]

欢迎介入我   回复  引用    

#9楼  2007-05-16 09:42 wingoo      

gmail有每天有发送个数限制的...
我们公司用的都给封掉了-_-
  回复  引用  查看    

#10楼 [楼主] 2007-05-16 10:46 Artech      

@晓木
谢谢你的提醒,我的原意是想写的是Gmail,不过可以把它看作是任意的Emaill address:)   回复  引用  查看    

#11楼 [楼主] 2007-05-16 10:49 Artech      

@ddr888
Vista用了快半年的,原来只是为了尝尝新鲜,现在有点依赖了:)
可能就像是用了Mac的操作系统就很难接受Widows了。   回复  引用  查看    

#12楼 [楼主] 2007-05-16 10:52 Artech      

@wingoo
哦,这个我还不知道,它的最大发送个数是多少?   回复  引用  查看    

#13楼  2007-05-16 16:09 <>neilzhang      

maimessage有时候有问题,建议用CDO发送邮件。   回复  引用  查看    

#14楼  2007-05-16 16:41 狂人      

465的端口应该被Gmail放弃了,记得之前看过一篇通告之类的,Outlook里面好用也可能是之间有一个类似Http Redirect的协议通讯在作祟?猜测而已,我不记得Smtp协议带这个,但是关于SSL通讯方面的协议没研究过。

如果是同步发信的话,我觉得在国内往Gmail发比较慢,界面上的响应不是很理想,除非Google能在本地放置Mail服务器。之前在单位一直用的破解版MDaemon,后来被发律师函警告 >< 现在则干脆找家ISP买一个mail服务,1年也不过100元,速度还很快   回复  引用  查看    

#15楼 [楼主] 2007-05-16 17:17 Artech      

@狂人
Google Gmail的Server不在本地,肯定会有延迟。发Email只是一个很少用到的附加功能,那没问题。 如果发Email是一个被频繁使用的操作,我也觉得购买ISP的Mail Service是明智的。   回复  引用  查看    

#16楼  2007-05-16 20:42 .net专题网 [未注册用户]

gmail还在测试中,有时不太稳定   回复  引用    

#17楼 [楼主] 2007-05-16 21:19 Artech      

@.net专题网
Gmail的稳定性还可以,我对他满有信心的。现在只有两个私人邮箱,hotmail和gmail。   回复  引用  查看    

#18楼  2007-05-21 11:37 zoti [未注册用户]

不錯。 :)   回复  引用    

#19楼  2007-05-23 02:18 cody.yan [未注册用户]

╭∩╮(︶︿︶)╭∩╮现在感觉网易是越来越垃圾了,加载速度暴慢

GMAIL 用 https登录还是很快的。。   回复  引用    

#20楼  2007-05-31 22:38 gerdy [未注册用户]

哎。。用GMAIL有挺长一段时间了。。但是最近2个月才发现,这个邮箱老是出问题。。一般用IE打开后,点击收件,就会出现,系统错误,无法操作什么的。。。然后就断开了Gmail的连接了。。之后,1,2分钟都无法连接Gmail。。然后2分钟过后,又可以访问了。然后,有可能再发生之前的问题。。。发生问题的概率大概有30%以上吧。。哎。。现在写邮件都不用gmail了。直接用hotmail。。。不过,好像hotmail有时收不到邮件。。已经有2封163发到hotmail的邮件没收到了。。   回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-05-18 13:18 编辑过