Отправка электронной почты несколько раз с помощью smtplib в Python

Я написал следующий код для отправки электронного письма, которое просто отправляет «тест» на указанный адрес электронной почты.

 import smtplib
        sentFrom = "my email" 
        to = input("Enter email:  ")
        #numberEmails = raw_input ("Enter number of emails to send")
        messageText = "test"

        msg = "From: %s\n To: %s\n\n%s" % (sentFrom, to, messageText)

        username = str("my email")  
        password = str("my password")  

        try :
            server = smtplib.SMTP("smtp.gmail.com", 587)
            server.ehlo()
            server.starttls()
            server.login(username,password)
            server.sendmail(sentFrom, to, msg)
            server.quit()    
            print (" Email has sent")
        except :
        print("email NOT sent")

Когда я пытаюсь отправить больше писем, чем 1, например:

 5*server.sendmail(sentFrom, to, msg)

Отправляет только одно электронное письмо, затем я получаю сообщение об ошибке «письмо НЕ отправлено». Я не получаю «электронное письмо отправлено» после отправки первого электронного письма, только печать «электронное письмо НЕ отправлено» после первого. Как я могу решить эту проблему? Я хочу в конечном итоге иметь input(), чтобы я мог ввести количество писем для отправки, и программа отправляет количество писем, введенных во вход. Я написал, как, по моему мнению, это будет выглядеть в виде комментария вверху. Могу ли я просто умножить команду server.sendmail на команду numberEmails?

Это мой первый день использования Python, так что полегче со мной, пожалуйста. :)


person raviriley    schedule 24.04.2017    source источник


Ответы (1)


Вы не можете умножить это.

Умножать можно только числа, server.sendmail(sentFrom, to, msg) не дает числа.

Вам придется перебрать необходимую сумму.

Например, это печатает «hello world» пять раз:

def test():
    print "hello world"

numberEmails = 5

for _ in range(numberEmails):
    test()

Конечно, вам нужно разобрать ваши numberEmails на int, если это не целое число.

В конце концов вам придется перебрать весь этот блок 5 раз.

try :
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(username,password)
        server.sendmail(sentFrom, to, msg)
        server.quit()    
        print (" Email has sent")
    except :
    print("email NOT sent")
person kawa    schedule 24.04.2017
comment
В итоге я использовал цикл while, спасибо за хорошо написанный ответ. - person raviriley; 28.04.2017