使用 SMTP 发送电子邮件

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
使用 SMTP 发送电子邮件
文章来源:岚山夜话
HTTP://WWW.33D9.COM
SMTP 的工作方式?
简单邮件传输协议是核心 Internet 协议 (IP) 之一,其设计主旨是可靠有效地传输电子邮件。
SMTP 的最初构想相对来说比较简单。用户或应用程序(此处为 Duwamish Online)撰写邮件,
其中包含收件人电子邮件地址(例如 "johndoe@somecompany.com")、邮件主题及邮件内容。
传递邮件的第一步是将邮件传送至指定的 SMTP 服务器。SMTP 服务器根据收件人电子邮件地址
的域名(例如 "somecompany.com"),开始与域名系统 (DNS) 服务器通信,DNS 服务器将查找
并返回该域的目标 SMTP 服务器的主机名(例如 "mail.somecompany.com")。
最终,启动邮件传递的 SMTP 服务器将通过传输控制协议 / Internet 协议的端口 25 直接与
目标 SMTP 服务器进行通信。如果收件人电子邮件地址的用户名与目标服务器中的一个授权用
户帐户匹配,则原始电子邮件将最终传送至该服务器,等待收件人通过客户程序收取。
如果启动邮件传递的 SMTP 服务器无法与目标服务器直接通信,则 SMTP 协议能够提供通过一
个或多个中继 SMTP 服务器传送邮件的机制。中继服务器将接收原始邮件,然后尝试将其传递
至目标服务器,或重定向至另一中继服务器。此过程将一直重复,直到邮件传递至目标服务器,
或超过指定的超时时间为止。

在 Windows 2000 中设置 SMTP
从 Microsoft Windows NT?的以前版本开始,SMTP 服务就一直作为 Internet 信息服务的一
个组件。由于 SMTP 服务在 Duwamish Online 中主要用来处理容量相对较小的待发电子邮件(
用于确认订单),所以在业务初期不必专门用一台计算机来实现此功能。最后,我们决定将
SMTP 服务放在订单处理服务器上,该服务器已连接到外部的 Internet 网段。

下面是用来为 Duwamish Online Web 站点设置 SMTP 服务的步骤。

配置 SMTP 服务
如果 SMTP 服务安装在连接 Internet 的主机上,且面向 Internet 的防火墙不阻止 SMTP 通
信访问端口 25,则 SMTP 服务的默认设置应能传递所有待发电子邮件。不过,可能仍有一些要
为 SMTP 服务器考虑的安全设置。其中大多数设置都可通过“Internet 服务管理器”管理控制
台进行更改。

若要启动 IIS 管理控制台,请执行以下操作:

从开始菜单,指向程序/管理工具。
单击 Internet 服务管理器以启动管理控制台。
若要设置服务器日志记录,请执行以下操作:

在 Internet 信息服务对话框的左侧窗格中展开目录树。用鼠标右键单击默认 SMTP 虚拟服务
器,然后选择属性。
在属性对话框中单击常规选项卡。为该服务器选中启用日志记录复选框。默认情况下不启用该
属性。
选择首选的日志文件格式。默认设置为 W3C 扩充日志文件格式。
单击日志文件格式下拉菜单旁边的属性按钮。
如果需要,请调整日志文件翻转的时间安排和文件名。
单击扩展属性选项卡。
选择任何感兴趣的项,然后单击确定。
注 为了限制日志文件的大小,不应选择过多的项。此处建议了一些可能有用的项:日期、时间、
客户 IP 地址、用户名、服务名、方法、发送字节数以及接收字节数。

若要设置访问控制,请执行以下操作:

在属性对话框中单击访问选项卡。单击中继按钮,控制可将电子邮件中继至 SMTP 服务器的计算机。
在中继限制对话框中单击添加。
在计算机对话框中输入允许通过 SMTP 服务器中继电子邮件的计算机 IP 地址。单击确定应用更改。
注 如果待发邮件从同一台计算机发送到 SMTP 服务器,则中继权限的默认设置将能很好地工作。
不过,如果邮件从另一台计算机发出,则需要将该计算机的 IP 地址或域名添加到权限列表中,
以使中继正常工作。

指定智能主机进行中继
如果 SMTP 服务器位于阻止所有直接 SMTP 通信(通过端口 25)的防火墙之后,则需查找网络上是
否有允许将所有 SMTP 邮件中继至 Internet 的智能主机。

从根本上说,智能主机可以是另一台具有待发电子邮件中继权限的 SMTP 服务器,它将邮件从其他
内部 SMTP 服务器直接中继至 Internet。因此,智能主机应能同时连接内部网络和 Internet,这
样才能充当电子邮件网关。

识别出网络上的智能主机后,即可设置 SMTP 服务器。

若要设置 SMTP 服务器,请执行以下操作:

在属性对话框中单击传递选项卡,然后单击高级按钮,打开高级传递对话框。
在智能主机字段中键入智能主机完全合格的域名 (FQDN)。或者输入智能主机的 IP 地址,并在前后
都加上 [ 和 ],如“[10.10.10.1]”。[] 有助于加快 DNS 的查询进程。
单击确定完成上述更改。
验证 SMTP 服务
有多种方式可验证 SMTP 服务是否工作正常。

通过电子邮件客户程序进行测试
首先,可选择使用标准的 Internet 电子邮件客户程序(如 Microsoft Outlook?Express)进行快
速验证。找到可指定待发电子邮件 (SMTP) 服务器的位置,将其更改为新的 SMTP 服务器域名。向通
常使用的电子邮件地址发送测试邮件,验证发送是否正常。

通过收取目录进行测试
也可以撰写一个符合 SMTP 规范 (RFC 822) 的简单电子邮件文本文件。下面是在记事本中输入的示例
文本文件内容:

From:myname@mydomain.com
To:someone@somedomain.com
Subject:testing

This is the test message body.

只需将该文本文件复制或移到安装了 SMTP 的收取目录中。(默认路径应为 "root:/Inetpub/mailroot
/Pickup"。)SMTP 服务会定期检查收取目录,并尝试发送在该目录中找到的所有邮件。验证是否能在
目标收件箱中收到该测试邮件。

有关正确格式化邮件应遵循的 RFC 822 规范的详细信息,请参阅 RFC 822 邮件格式。

通过 CDO 进行测试
验证 SMTP 服务的另一方式是使用 Windows 2000 协作数据对象 (CDO) 编写简单的 Microsoft Visual
Basic?Scripting Edition (VBScript) 脚本。

CDO for Windows 2000(a.k.a. CDO 2.0 或 Cdosys.dll)是一套设计用来简化 Internet 邮件创建或
处理的协作组件。有了 CDO,开发人员可以不必编写自己的 SMTP 通信代码,而是使用 CDO 收发使用
SMTP 协议的邮件,也可通过本地收取目录收发邮件。有关详细信息,请参阅 CDO for Windows 2000
的相关文章。

下面是一个 VBScript 示例,说明如何使用 CDO 通过 SMTP 服务传递邮件:

set msg = WScript.CreateObject("CDO.Message")
msg.From = "myname@mydomain.com"
msg.To = "someone@somedomain.com"
msg.Subject = "testing"
msg.TextBody = "This is a test message body."

msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver")
= "smtpserver.mydomain.com"

msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

msg.Configuration.Fields.Update
msg.Send


上述代码示例的前五行创建 CDO 对象,并指定邮件的基本信息。

接下来的两行代码使用 CDO Configuration 对象设置各配置设置的字段值。每个字段由两部分组成:
名称空间前缀(如 "http://schemas.microsoft.com/cdo/configuration/")和本地名称
(如 "smtpserver")。

该机制基于万维网联盟 (W3C) 的 XML 格式的名称空间推荐标准
(http://www.w3c.org/TR/REC-xml-names/),主要用于提供一致性,以及促进与其他相关版本的 CDO
组件的兼容性。

字段 "smtpserver" 指定 SMTP 服务器的域名(或 IP 地址),而字段 "sendusing" 定义应使用本地
SMTP 服务投信目录发送邮件,还是通过网络直接发送至 SMTP 服务器。后一字段的值设置为 2,表
示通过网络将邮件发送至指定的 SMTP 服务器。

最后两行代码更新配置设置,并启动邮件传递。

使用 CDO 组件的这一方法对于验证 SMTP 服务来说可能显得多余。不过,该脚本经证明对其他系统管
理任务很有用。例如,当某些系统计数器超出指定阈值时,可在为电子邮件通知编写的“性能日志和警
报”程序中使用该脚本。

识别失败的传递
无论因何种原因而无法传递电子邮件时(例如,用户名或电子邮件地址错误),都会将该传递失败的
邮件重定向至死信目录。死信目录的默认位置应为 "root:/Inetpub/mailroot/Badmail"。检查被拒
电子邮件的内容,并查找是否有任何特定的错误消息。如果可能,则更正错误,并再次通过上面讨论
的一种传递方法重发邮件。

除死信目录外,电子邮件也可在队列目录中保存一段指定时间。(此设置的指定方法为:在默认
SMTP 虚拟服务器属性对话框的传递选项卡中调整出站重试间隔。)如果因为网络繁忙或网络连接断
开而无法立即传递邮件,邮件则会存储在队列目录中,并按指定间隔再次发送。如果 SMTP 在几次传
递尝试不成功之后放弃传递,邮件将最终移至死信目录。

学习笔记(二十一)—— 使用SMTP发送电子邮件 一、常用的电子邮件协议 常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍 1.1、SMTP协议 SMTP的全称是"SimpleMailTransferProtocol",即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器就是遵循SMTP协议的发送 阅读详情

相关推荐

使用 Spring Boot 发送电子邮件SMTP 集成)

是的,您可以拥有专用的 REST API,它接受电子邮件发送者和接收者的电子邮件地址、主题和正文——构成商务电子邮件的经典属性。然后,您的前端团队可以通过传递必要的参数来随意调用此 API,瞧!本文探讨了 Spring Boot 与 SMTP 的集成以及如何从您自己的 Spring Boot 应用程序发送电子邮件。完成所有必需的配置后,我们就可以公开我们的其余端点/邮件,它将接受传入请求以将电子邮件发送到特定电子邮件地址。在本文中,我们将了解如何从简单的 Spring Boot 应用程序发送电子邮件

程序猿大波的博客 1454

请教问题:程序运行报错:SendUsing 无效

代码如下 Dim mailMsg as new mailMessage --指定发件人,收件人与主题-- mailMsg.To=Recipient mailMsg.Cc=strCc mailMsg.From=SenderEmail mailMsg.Subject=Subject    --指定邮件内容为html格式-- mailMsg.BodyFormat=MailFormat.Html -

yangzhengyi123的专栏 939

Matlab:使用SMTP协议发送电子邮件

请确保您提供的SMTP服务器地址、端口号和您的电子邮件账户凭据是正确的。此外,一些电子邮件服务提供商可能需要对发送邮件的账户进行额外的设置,例如在账户设置中启用SMTP访问权限。在Matlab中,您可以使用SMTP协议发送电子邮件,这使得向用户发送通知、报告和其他重要信息变得非常方便。在本文中,我将向您展示如何使用Matlab的内置函数来设置和发送电子邮件。首先,您需要知道用于发送电子邮件SMTP服务器的地址和端口号。接下来,我们需要设置电子邮件的详细信息,包括收件人、主题和正文。设置为正确的端口号。

2301_79326930的博客 514

server2008上发送邮件的问题

WINDOWS SERVER 2003 以下用 CDO.Message 寄送 E-MAIL 都正常,但 WINDOWS SERVER 2008 (可能也包括 VISTA) 就問題可多了  1.WINDOWS SERVER 2008 似乎沒有 SMPT Service,但有 SMPT 伺服器,它不是預設安裝的選項,所以要先手動安裝後重啟電腦。  2.在 WINDOWS SER

qingtianxl的专栏 1767

使用vbs发送邮件(使用的是126的smtp服务器地址)

原文地址:使用vbs发送邮件(使用的是126的smtp服务器地址)作者:窗前的风景1   Call send_mail("hello1194@126.com","a123456","hello1194@126.com","","qa全体sb","sb all","c:img.jpg") function Send_mail(You_Account,You_Password

let's go 5159

IIS 7完全攻略之SMTP 电子邮件配置

  若要使用 System.Net.Mail API 从 ASP.NET 应用程序中发送电子邮件,必须配置 SMTP 电子邮件。通过配置电子邮件服务,可以指示 System.Net.Mail API 应该将应用程序生成的电子邮件传送到哪个 SMTP 服务器。  若要使用 System.Net.Mail API 从 ASP.NET 应用程序中发送电子邮件,必须配置 SMTP 电子

ASP.NET,C# 1万+

使用SMTP使用Python发送电子邮件

本教程将对SMTP(用于发送邮件的Python模块)进行介绍。 它还将演示如何发送不同的电子邮件类型,例如简单文本电子邮件,带有附件的电子邮件以及带有HTML内容的电子邮件SMTP简介 简单邮件传输协议(SMTP)处理在邮件服务器之间发送和路由电子邮件。 在Python中, smtplib模块定义了一个SMTP客户端会话对象,该对象可用于通过SMTP或ESMTP侦听器守护程序将邮件...

代码教主 1543

smtp gmail_如何使用Gmail SMTP服务器在WordPress中发送电子邮件

smtp gmailAre you having trouble sending emails from your WordPress site? 您是否无法从WordPress网站发送电子邮件? One easy way to solve this is by sending WordPress emails using the Gmail SMTP server. 解决此问题的一种简...

cumohuo9136的博客 6846

在Python中使用SMTP发送电子邮件

Python中有内置的smtplib模块,完成一封邮件的发送,需要做很多准备工作。第三方的py_smtp这个包也是基于smtplib的,在Python中使用py_smtp发送电子邮件非常方便,只要填写发送邮件的相关信息即可。 一、安装模块 pip install py-smtp 二、发送邮件 from py_smtp import send send('smt...

丁丁爸爸的技术博客 2155

Python使用SMTP发送电子邮件

In this tutorial we will see how to send email using Python. We will need two python libraries for the same, smtplib will be used for making a host for sending email it will also handle routing of ema...

culing2941的博客 781

计算机应用发邮件,使用 SMTP 发送电子邮件

使用 SMTP 发送电子邮件Duwamish OnlineAaron ChingMicrosoft Developer Network2000年12月摘要:本文讨论使用 Internet 信息服务 (IIS) 提供的简单邮件传输协议 (SMTP) 服务发送电子邮件的优点。文中同时讲述了配置和测试 Duwamish Online 服务的情况。简介Duwamish Online 应用程序向客户发送电...

weixin_35377028的博客 3859

7、使用SMTP发送电子邮件

本文详细介绍了使用SMTP协议发送电子邮件的原理和过程,并结合JavaMail API演示了如何在Java应用中发送简单文本邮件、带附件的邮件以及支持HTML格式和内嵌资源的邮件。文章还探讨了SMTP协议的安全性、常见问题及解决方案,以及其在自动化通知、批量发送和事务性邮件中的应用场景。此外,还提供了调试SMTP邮件发送的实用技巧,帮助开发者高效实现邮件功能。

n7o8p的博客 66

SMTP协议解读以及如何使用SMTP协议发送电子邮件

电子邮件协议中POP3协议用于接收邮件,SMTP协议用于发送邮件。SMTP的全称为Simple Mail Transfer Protocol,也就是简单邮件传输协议,字如其名。   相较于POP3而言,SMTP确实比较简单。这里的简单并不是指SMTP的命令比POP3少,而是指SMTP的命令是有序的,而POP3的命令是无序的,理解这一点很重要。也就是说SMTP的命令是要组合在一起才能完成一次邮件发送任务,单独调用每个命令的意义不大。POP3命令则不同,LIST、STAT、UIDL、TOP、RETR、

lgsoftlee的博客 1万+

Java中使用SMTP协议发送电子邮件

Java中使用SMTP协议发送电子邮件的具体的步骤: 1、首先需要获取发送邮件的Session对象 Session session = Session.getDefaultInstance(properties,authorcator); 2、根据session对象,获取待发送的邮件消息 MimeMessage mimeMessage = new MimeMessage(session);

captian_900331的博客 2020

C#使用SMTP发送电子邮件

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Net; using System.Net.Sockets; using Syst

u011282129的专栏 973
上一篇: 富人和穷人对待12大问题的经典差异
下一篇: 一个新的JMail(4.3版本)发送代码
李煎熬
博客等级 码龄25年 16粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值