当代码中生成随机数时,如何解决在电子邮件中没有收到随机数的问题?

时间:2019-02-17 05:48:35

标签: python-3.x sockets mail-server

我只想在电子邮件中接收随机数,然后在我的代码中将其验证为True。

我正在使用Python 3.5使用“导入随机数”和“ random.randint(x,y)”生成随机数。尽管随机数正在代码中生成并显示在屏幕上,但是当我使用smtp将随机数发送到我的电子邮件时,邮件是空的,没有生成随机数。另外,输入验证码后,运行代码后在屏幕上显示的随机数不匹配。

import smtplib
import getpass
import random

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()

email = input("Enter you email address: ")
password = getpass.getpass("Enter your password: ")

server.login(email, password)

from_address = email
to_address = input('Enter the email you want the message to be sent to: ')
subject = input('Enter the subject: ')
secure_code = random.randint(1000, 9999)
print(f'The secure code received on the mail is {secure_code}')
message = f'Secure Code: {secure_code}'
msg = "Subject: "+subject + '\n' + message
print(msg)
server.sendmail(from_address, to_address, msg)

verify = input("Enter the secure code: ")

if verify == secure_code:
    print('Transaction accepted.')
else:
    print('Attention! The code entered is not correct!')
    break

输入所有必需的详细信息后,应使用显示的随机数接收邮件,然后对输入的数字进行验证。

1 个答案:

答案 0 :(得分:0)

Internet邮件格式需要用空行作为邮件头和邮件正文之间的分隔符。另外,邮件中的行尾标记是一对字符'\r\n',而不仅仅是单个字符'\n'。所以改变这个:

    msg = "Subject: "+subject + '\n' + message

收件人:

    msg = "Subject: " + subject + '\r\n' + '\r\n' + message

第一个'\r\n'标记了主题行的结尾,第二个提供了将标头与正文分开的空行。

  

此外,输入验证码后,运行代码后屏幕上显示的随机数不匹配。

这是因为在Python 3中,input()返回的值始终是字符串。这行:

    verify = input("Enter the secure code: ")

verify设置为字符串。然后这行:

    if verify == secure_code:

verify字符串与secure_code数字进行比较。字符串和数字不匹配,因此比较总是产生错误的结果。要解决此问题,请将该比较更改为此:

    if verify == str(secure_code):