Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2007 19:56:16

denz
От:
Зарегистрирован: 2007-01-09
Сообщения: 117
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка почты

Это уже вопрос работы удаленного SMTP сервера.
Он может отвергать соединение потому что просто сервера там нет, или он настроен отвергать такое соединение (например по твоему IP), или он не настроен на авторизацию.
Нормальная практика - разрешать авторизацию только в режиме TLS.
попробуй так:

#!/usr/bin/env python

import smtplib

server = smtplib.SMTP('mail.bk.ru')
server.set_debuglevel(1)
server.ehlo()
server.starttls()
server.ehlo()
server.login(“login”, “password”)
server.sendmail(“sobaka@bk.ru”,“barabaka@bk.ru”, “Subject: testing message\r\n”)
server.quit()



Отредактировано (Май 26, 2007 19:56:53)

Офлайн

#2 Май 27, 2007 10:50:05

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты

denz, спасибо большое, получилось отправить так:

# -*- coding: cp1251 -*-
import smtplib
from email.MIMEText import MIMEText

# отправитель
me = 'me@bk.ru'
# получатель
you = 'you@gmail.com'
# текст письма
text = 'Это тестовое письмо!\nС наилучшими пожеланиями!'
# заголовок письма
subj = 'Привет от Python'

# параметры SMTP-сервера
server = "194.67.23.114" # "smtp.bk.ru"
port = 25
user_name = "me"
user_passwd = "pass"

msg = MIMEText(text, "", "cp1251")
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you

s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
Однако, осталось две проблемы:
1. Бред с кодировками. Тема письма приходит по-русски, тело письма - в кракозябрах.
2. Как отправить письмо с аттачем файла?



Отредактировано (Май 27, 2007 12:22:51)

Офлайн

#3 Май 28, 2007 07:25:39

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты

Все ники заняты
1. Бред с кодировками. Тема письма приходит по-русски, тело письма - в кракозябрах.
2. Как отправить письмо с аттачем файла?
http://docs.python.org/lib/module-email.html



Офлайн

#4 Май 28, 2007 19:52:08

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты

j2a, не нашёл по ссылке ответа на свои вопросы.



Офлайн

#5 Май 29, 2007 06:40:52

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Офлайн

#6 Май 29, 2007 07:19:53

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка почты

вот ещё пример, правда для входящей почты, но там есть решение проблемы по кодировке:
http://python.com.ua/forum/viewtopic.php?id=671



Офлайн

#7 Май 29, 2007 21:24:07

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты

Спасибо, но не получается. Код:

# -*- coding: cp1251 -*-
import smtplib, os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import Encoders

# отправитель
me = 'me@bk.ru'
# получатель
you = 'you@gmail.com'
# текст письма
text = 'Это тестовое письмо!\nС наилучшими пожеланиями!'
text = unicode(text, "cp1251").encode("koi8-r")
# заголовок письма
subj = 'Привет от Python'
# вложение
myfile = 'C:\\Temp\\cshadow.zip'

# параметры SMTP-сервера
server = "194.67.23.114" # "smtp.bk.ru"
port = 25
user_name = "me"
user_passwd = "pass"

# msg = MIMEText(text, "", "cp1251")
msg = MIMEMultipart()
msg['Subject'] = subj
msg['From'] = me
msg['To'] = you
msg.attach(MIMEText(text, "", "cp1251"))

part = MIMEBase('application', "octet-stream")
part.set_payload(open(myfile,"rb").read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition',
'attachment; filename="%s"' % os.path.basename(myfile))
msg.attach(part)

s = smtplib.SMTP(server, port)
s.starttls()
s.login(user_name, user_passwd)
s.sendmail(me, you, msg.as_string())
s.quit()
Почта уходит, но вместо отправленного в почтовом клиенте получаю “Mail delivery failed: returning message to sender”:
SMTP error from remote mailer after end of data:
host gmail-smtp-in.l.google.com :
552 5.7.0 Illegal Attachment y37si705888iky
Самое смешное, что если посылать какой-нибудь boot.ini - всё доходит, zip - не доходит.
И по кодировкам. Я вообще не понимаю, с какого перепугу работает только вот так:
text = unicode(text, “cp1251”).encode(“koi8-r”)
У меня WinXP SP2, ActivePython 2.5. Откуда взялась эта “koi8-r” ??????



Офлайн

#8 Май 30, 2007 21:21:58

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Отправка почты

Помогите поправить код, please. Из почтового клиента этот сервер без проблем отправляет и получает zip'ы, так что проблема точно в коде.



Офлайн

#9 Янв. 22, 2010 15:29:10

VIN
От:
Зарегистрирован: 2010-01-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка почты

j2a
Странно пишешь…
1) Модуль string устарел. Нужно пользоваться методами.
2) Зачем переменная host, если в smtplib.SMTP все равно указываешь ip?
3) А ты вообще никаких заголовков не указал. Не путай заголовки в письме и адресат, кому отправляешь.

import smtplib
from email.MIMEText import MIMEText

me = ‘xxx@mail.ru
me_in_header='bugaga@mail.ru'
you = ‘xxx0@mail.ru
you_in_header = ‘opa@mail.ru
they = ‘yyy@mail.ru, zzz@list.ru
they_in_header = ‘malchick@mail.ru, devotchka@list.ru
text = “”“
This email brings BCC news for you!!
Best Regards!!!
”“”

msg = MIMEText(text)
msg = ‘Hey from Python’
msg = me_in_header
msg = you_in_header
msg = they_in_header

recipients = list(you) +

s = smtplib.SMTP() # means localhost
s.connect()
s.sendmail(me, recipients, msg.as_string())
s.close()
В качестве разминки - подумай, кто же реально получит сообщение и с какими заголовками.
в качестве разминки протестируй сначала сам



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version