标签: smtplib

SMTP 直接发送到主机的 MX 记录

我尝试使用 python 来了解有关 smtp 协议的更多信息。更准确地说,我一直在尝试将邮件直接发送到主机的 smtp 服务器,但收效甚微。

例如,假设我想向 gmail.com 地址发送邮件,我会查找 gmail.com 的 mx 记录:

>> nslookup -type=MX gmail.com
gmail.com       MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com
gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com
Run Code Online (Sandbox Code Playgroud)

然后我在 python 中执行以下操作:

import smtplib
# Tried both port 465 and 587 (can't test port 25 since it's blocked by my ISP)
s = smtplib.SMTP("alt1.gmail-smtp-in.l.google.com", 587) 
Run Code Online (Sandbox Code Playgroud)

我尝试了几个,除了一个之外的每个人我总是得到一个:
“[Errno 10051]尝试对无法访问的网络进行套接字操作”
“[Errno 10060]连接尝试失败,因为连接方在一段时间后没有正确响应时间过长,或建立的连接失败,因为连接的主机未能响应”异常。

我在某处读到一些邮件服务器对您的 IP …

python email smtp smtplib

5
推荐指数
1
解决办法
3618
查看次数

电子邮件仅发送给第一个收件人 smtp 邮件 python

我知道,同一个查询有数百个问题。为此事道歉。我几乎每一个都尝试过。但仍然没有得到解决方案。事实上,我从 stackoverflow 查询之一复制了一些代码,并根据我的要求对其进行了改进。

我正在编写一个脚本,使用 python 为我们的一台服务器发送错误报告。我的问题是Email is sending to first member of RECIPIENTS only.它需要一次发送给经理团队以及管理员。

RECIPIENTS = ["mail1@gmail.com", 'mail2@mydomain.in' ]
TO = ", ".join(RECIPIENTS)
USER = "user30@gmail.com"
PASSWD = "userpass"

def sendmail():
    msg = MIMEMultipart('alternative')
    msg['Subject'] = subject()
    msg['From'] = USER
    msg['To'] = TO
    mime_text = MIMEText(get_msg_text(), 'plain')
    msg.attach(mime_text)

    #-- Auth by Gmail
    SERVER = smtplib.SMTP("smtp.gmail.com:587")
    SERVER.starttls()

    try:
       SERVER.login(USER,PASSWD)
    except SMTPAuthenticationError, e:
        logit(e)
        return False

    try:    
        SERVER.sendmail(msg['From'], msg['To'], msg.as_string())
    except Exception, e:
        logit(e)
        return False
    finally:
        SERVER.quit()
    return True …
Run Code Online (Sandbox Code Playgroud)

python email smtplib

5
推荐指数
1
解决办法
5757
查看次数

Python 尝试/排除 SMTPLib 问题

我使用 Python 的 SMTPLib 编写了一个简单的 SMTP 客户端。只是尝试添加一些错误处理 - 特别是在这种情况下,当要连接的目标服务器不可用时(例如,指定了错误的 IP!)

目前,回溯如下所示:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "smtplib_client.py", line 91, in runClient
    try:
  File "/usr/local/lib/python2.7/smtplib.py", line 251, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/local/lib/python2.7/smtplib.py", line 311, in connect
    self.sock = self._get_socket(host, port, self.timeout)
  File "/usr/local/lib/python2.7/smtplib.py", line 286, in _get_socket
    return socket.create_connection((host, port), timeout)
  File "/usr/local/lib/python2.7/socket.py", line 571, in create_connection
    raise err
socket.error: [Errno 111] Connection refused
Run Code Online (Sandbox Code Playgroud)

很明显,socket.py 中的“create_connection”正在爆炸。这有它自己的 try / except 块: …

python error-handling try-catch smtplib

5
推荐指数
1
解决办法
2万
查看次数

使用 Python 和 smtplib 发送电子邮件收到两封重复的电子邮件

Python 新手在这里。我正在尝试在处理命令后发送电子邮件。当我测试时,我收到了两封重复的电子邮件,而另一封则为 1。我的代码如下。

import smtplib
import os.path

from email.mime.text import MIMEText

msg = MIMEText("The report at *link* has been updated")

msg['Subject'] = "Test Report Notification **TEST**"

#put your host and port here 
s = smtplib.SMTP_SSL('###########.net:465')
s.login('system@#########','#####') 
s.sendmail('system@#####.com','bryan#########', msg.as_string())
s.quit()
print("done")
Run Code Online (Sandbox Code Playgroud)

提前致谢。我确实尝试过研究。

python smtplib os.path

5
推荐指数
0
解决办法
714
查看次数

如何使用 python 和 smtplib 阅读电子邮件

找到了很多如何发送邮件的例子,但我如何阅读收件箱?例如 yandex。

import smtplib as smtp

email = "me@example.com"
password = "password"

server = smtp.SMTP_SSL('smtp.yandex.com')
server.set_debuglevel(1)
server.ehlo(email)
server.login(email, password)
server.auth_plain()
# server.get_and_print_your_inbox_magic_method()
server.quit()
Run Code Online (Sandbox Code Playgroud)

python email smtp smtplib yandex

5
推荐指数
1
解决办法
5676
查看次数

在Python中发送电子邮件(MIMEmultipart)

如何在同一正文中发送文本格式和 html 格式的电子邮件?有什么用MIMEmultipart

MIMEMultipart([MIMEText(msg, 'text'),MIMEtext(html,'html')])
Run Code Online (Sandbox Code Playgroud)

我能够使用此功能收到一封电子邮件,但正文为空白

PS:我正在尝试发送文本并在同一正文中附加表格。我不想将表格作为附件发送。

html = """
  <html>
   <head>
    <style> 
     table, th, td {{ border: 1px solid black; border-collapse: collapse; }} th, td {{ padding: 5px; }}
    </style>
   </head>
   <body><p>Hello, Friend This data is from a data frame.</p>
    <p>Here is your data:</p>
    {table}
    <p>Regards,</p>
    <p>Me</p>
   </body>
  </html> """

text = """
Hello, Friend.

Here is your data:

{table}

Regards,

Me"""
text = text.format(table=tabulate(df, headers=list(df.columns), tablefmt="grid"))
html = html.format(table=tabulate(df, headers=list(df.columns), tablefmt="html"))
if(df['date'][0].year==1900 and df['date'][0].month==datetime.date.today().month and df['date'][0].day==datetime.date.today().day): …
Run Code Online (Sandbox Code Playgroud)

python email mime smtplib python-3.x

5
推荐指数
2
解决办法
2万
查看次数

使用smtplib SMTP.sendmail发送邮件后如何获得服务器回复

我有一个使用python smtplib发送邮件的程序。我的邮件发送部分工作正常,但是在发送邮件之后,我还需要捕获服务器返回消息。例如,postfix在邮件排队后返回以下消息:

reply: '250 2.0.0 Ok: queued as EB83821273B\r\n'
reply: retcode (250); Msg: 2.0.0 Ok: queued as EB83821273B
data: (250, '2.0.0 Ok: queued as EB83821273B')
Run Code Online (Sandbox Code Playgroud)

我真正感兴趣的是错误代码(250)和队列ID(EB83821273B)。如果设置set_debuglevel(1),则可以打印这些,但是我需要将其捕获到变量中以进行进一步的日志记录和处理。

谢谢并恭祝安康,

拉吉

python smtplib

4
推荐指数
1
解决办法
3412
查看次数

如何将smtp调试信息记录到文件中?

如您所知,python smtplib具有调试级别.当我将其设置为真正的参数时,它将打印一些发送信息.
问题是,我尝试将调试信息记录到一个文件中,但它们只停留在我的cmd控制台上.如何记录它们?

像这样的信息:

connect: ('192.168.1.101', 25)
connect: (25, '192.168.1.101')
reply: '220 ESMTP on WinWebMail [3.8.1.3] ready.  http://www.winwebmail.com\r\n'

reply: retcode (220); Msg: ESMTP on WinWebMail [3.8.1.3] ready.  http://www.winw
ebmail.com
connect: ESMTP on WinWebMail [3.8.1.3] ready.  http://www.winwebmail.com
send: 'ehlo [169.254.63.67]\r\n'
reply: '250-SIZE\r\n'
reply: '250 AUTH LOGIN\r\n'
reply: retcode (250); Msg: SIZE
AUTH LOGIN
bla bla bla bla........
Run Code Online (Sandbox Code Playgroud)

python email cmd smtp smtplib

4
推荐指数
1
解决办法
5481
查看次数

Cron python脚本没有执行

我已经阅读了几篇文章,但我找不到帮助.

我有一个使用smtplib发送邮件的python脚本.它从命令行调用时有效.

我有#!/usr/bin/python第一行,可以使用/home/pi/ipsender.py和运行它python /home/pi/ipsender.py.

我的crontab是*/1 * * * * /home/pi/ipsender.py,但我自己也尝试*/1 * * * * python /home/pi/ipsender.py*/1 * * * * /usr/bin/python /home/pi/ipsender.py.

这样做which python,我得到/usr/bin/pyhton和命令行我可以导入和使用的smtplib就好运行蟒蛇.

/var/log/syslog我得到:

Nov 27 22:57:01 raspberrypi /USR/SBIN/CRON[3764]: (pi) CMD (python /home/pi/ipsender.py)
Nov 27 22:57:01 raspberrypi /USR/SBIN/CRON[3763]: (CRON) info (No MTA installed, discarding output)
Run Code Online (Sandbox Code Playgroud)

我猜测没有MTA ......只是关于Cron没有发送关于它正在做什么的电子邮件,或者不是吗?

我该如何运行这个脚本.

[编辑]

脚本的权限是

-rwxr-xr-x 1 pi   pi       551 Nov 27 22:37 ipsender.py
Run Code Online (Sandbox Code Playgroud)

[Edit2]使用来自D Read的提示我得到以下日志 …

python cron crontab smtplib

4
推荐指数
1
解决办法
8142
查看次数

Python smtplib send_message()失败,返回AttributeError:'str'对象没有属性'get_all'

我正在开发一个项目,我必须使用Python 3.4中的smtplib和email模块发送电子邮件.

我能够自己创建电子邮件,我可以连接到服务器,但它会返回此异常:

reply: b'235 2.7.0 Accepted\r\n'
reply: retcode (235); Msg: b'2.7.0 Accepted'
send: 'QUIT\r\n'
reply: b'221 2.0.0 closing connection s66sm8304113yhp.2 - gsmtp\r\n'
reply: retcode (221); Msg: b'2.0.0 closing connection s66sm8304113yhp.2 - gsmtp'
Traceback (most recent call last):
  File "base.py", line 108, in <module>
    send(fromaddr, toaddrs, msg)
  File "base.py", line 61, in send
    server.send_message(fromaddr, toaddrs, msg)
  File "/usr/lib/python3.4/smtplib.py", line 829, in send_message
    resent = msg.get_all('Resent-Date')
AttributeError: 'str' object has no attribute 'get_all'
Run Code Online (Sandbox Code Playgroud)

代码(直接链接到麻烦的线)可用在这里.奇怪的是,代码实际上在实际发送任何电子邮件正文之前发送了QUIT - 不确定这是否会影响这一点.

有谁知道导致此错误的原因是什么?

编辑原来我的部分问题是我使用的格式不正确.send_message()需要变量的顺序 …

python email smtplib attributeerror

4
推荐指数
1
解决办法
4780
查看次数