我正在为我的最后一个学校项目做一些研究。我的想法是开发一个Android电子邮件客户端。
我正在测试一些我已经获得的想法并且出现了问题。要联系SMTP服务器,要发送电子邮件,我需要知道的是(SMTP服务器)名称和端口。例如,如果用户拥有mail.ru
帐户,那么我需要知道要联系的SMTP服务器名称和端口。
有没有办法以编程方式找到该名称和端口?
答案 0 :(得分:2)
通常,您只有一个配置为转发邮件的特定SMTP服务器。
如果您想自己进行交付,则必须向DNS询问邮件主机(在Linux系统上尝试dig mail.ru MX
)。但是,请注意,如果您使用动态IP地址,接收方可能会阻止您以避免垃圾邮件。
邮件传递端口,即您查找查询MX记录的主机,始终为25.如果您使用提供商外发邮件服务器,端口也可能是587 - 请询问您的提供商。
答案 1 :(得分:0)
有没有办法以编程方式找到该名称和端口?
您可以在DNS中找到邮件主机的名称(或名称)。查询MX
记录。获得邮件主机后,根据RFC 5321 Simple Mail Transfer Protocol使用端口25
。您不需要用户名和密码,因为它是另一个的邮件服务器。
如果您尝试连接到组织的邮件服务器,以便邮件服务器将邮件发送到其他系统,请尝试端口465或端口587.首先使用465,因为它是SMTPS
,然后尝试端口58 MSA
。您需要SMTPS
,因为您不希望以明文形式将您的身份验证凭据放在网上。
以下是使用dig(1)
查询MX
记录的方式:
$ dig gmail.com MX
; <<>> DiG 9.8.5-P1 <<>> gmail.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42931
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;gmail.com. IN MX
;; ANSWER SECTION:
gmail.com. 3599 IN MX 20 alt2.gmail-smtp-in.l.google.com.
gmail.com. 3599 IN MX 30 alt3.gmail-smtp-in.l.google.com.
gmail.com. 3599 IN MX 10 alt1.gmail-smtp-in.l.google.com.
gmail.com. 3599 IN MX 5 gmail-smtp-in.l.google.com.
gmail.com. 3599 IN MX 40 alt4.gmail-smtp-in.l.google.com.
;; Query time: 23 msec
;; SERVER: 172.16.1.10#53(172.16.1.10)
;; WHEN: Fri Feb 07 22:19:33 EST 2014
;; MSG SIZE rcvd: 150
您应该根据RFC 3207 SMTP Service Extension for Secure SMTP over Transport Layer Security包含对STARTTLS
命令的支持。服务器将对其进行广告宣传,但客户端必须参与其中。也就是说,它是客户的选择。
STARTTLS
命令将使窃听者不受限制,如电信,NSA和GHCQ。对手将不得不进行主动攻击,这些攻击更容易在野外发现。例如,我相信EFF运行了一些X509证书监控工具,可以捕获与活跃的MitM攻击相关的一些有趣的业务。