提示ValueError('Invalid address only %s could be parsed from "%s"' % (token, addr))的解决方案
报错的原因
ValueError('Invalid address; only %s could be parsed from "%s"' % (token, addr)) 通常是因为 Django 尝试解析不合法的电子邮件地址。
这个错误通常在你尝试使用 Django 的内置函数 send_mail 时出现。例如:
from django.core.mail import send_mail
send_mail(
'Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False,
)
如果你在调用 send_mail 函数时提供了不合法的电子邮件地址,则可能会出现 ValueError('Invalid address; only %s could be parsed from "%s"' % (token, addr)) 错误。
为了解决这个错误,你需要确保在调用 send_mail 函数时提供的所有电子邮件地址都合法。例如,你可以检查电子邮件地址是否包含了不合法的字符,或者检查电子邮件地址是否缺少 @ 符号。
例如,以下是一个使用了合法电子邮件地址的 send_mail 调用的例子:
from django.core.mail import send_mail
send_mail(
'Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False,
)
电子邮件时,应该确保所有电子邮件地址都合法。如果你仍然不能解决 ValueError('Invalid address; only %s could be parsed from "%s"' % (token, addr)) 错误,建议查看 Django 的错误日志,以获取更多有关错误的信息。
除了检查电子邮件地址是否合法之外,你还可以考虑使用其他方法发送电子邮件。例如,你可以使用 Python 的 smtplib 模块或者第三方库(如 Flask-Mail)来发送电子邮件。这些方法可能更加灵活,并且可以让你更好地控制电子邮件的发送过程。
如何解决
要解决 ValueError('Invalid address; only %s could be parsed from "%s"' % (token, addr)) 错误,需要确保你在调用 Django 的内置函数 send_mail 时提供的所有电子邮件地址都合法。
你可以通过以下方法来确保电子邮件地址合法:
1. 检查电子邮件地址是否包含了不合法的字符。例如,电子邮件地址中不能包含空格。
2. 确保电子邮件地址符合格式要求。例如,电子邮件地址必须包含 @ 符号。
3. 使用 Python 的 email 模块来验证电子邮件地址的格式。例如:
from email.utils import parseaddr
def is_valid_email(addr):
name, email = parseaddr(addr)
return bool(email)
如果你仍然不能解决 ValueError('Invalid address; only %s could be parsed from "%s"' % (token, addr)) 错误,建议查看 Django 的错误日志,以获取更多有关错误的信息。
另外,你还可以考虑使用其他方法发送电子邮件,如使用 Python 的 smtplib 模块或者第三方库(如 Flask-Mail)。这些方法可能更加灵活,并且可以让你更好地控制电子邮件的发送过程。
下面是使用 smtplib 模块发送电子邮件的示例代码:
import smtplib
from email.mime.text import MIMEText
msg = MIMEText('Here is the message.')
msg['Subject'] = 'Subject here'
msg['From'] = 'from@example.com'
msg['To'] = 'to@example.com'
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
使用 smtplib 模块发送电子邮件时,你需要指定 SMTP 服务器的地址。如果你使用的是免费的电子邮件服务(如 Gmail),则还需要提供用户名和密码。
使用第三方库发送电子邮件时,过程也大致相似。例如,使用 Flask-Mail 库发送电子邮件的示例代码如下:
from flask_mail import Mail, Message
mail = Mail()
msg = Message('Subject here', sender='from@example.com', recipients=['to@example.com'])
msg.body = 'Here is the message.'
mail.send(msg)
使用 Flask-Mail 库发送电子邮件时,你需要先在 Flask 应用中配置 Flask-Mail,然后才能使用 send 函数发送电子邮件。
注意:如果你使用的是免费的电子邮件服务(如 Gmail),则还需要提供用户名和密码。
如果你仍然不能解决 ValueError('Invalid address; only %s could be parsed from "%s"' % (token, addr)) 错误,建议查看相关的文档和错误日志,以获取更多有关错误的信息。
使用例子
以下是使用 Python 的 email 模块验证电子邮件地址的示例代码:
from email.utils import parseaddr
def is_valid_email(addr):
name, email = parseaddr(addr)
return bool(email)
# 验证合法电子邮件地址
print(is_valid_email('user@example.com')) # True
# 验证不合法电子邮件地址
print(is_valid_email('user@')) # False
print(is_valid_email('user')) # False
以下是使用 smtplib 模块发送电子邮件的示例代码:
import smtplib
from email.mime.text import MIMEText
msg = MIMEText('Here is the message.')
msg['Subject'] = 'Subject here'
msg['From'] = 'from@example.com'
msg['To'] = 'to@example.com'
s = smtplib.SMTP('localhost')
s.send_message(msg)
s.quit()
以下是使用 Flask-Mail 库发送电子邮件的示例代码:
from flask_mail import Mail, Message
mail = Mail()
msg = Message('Subject here', sender='from@example.com', recipients=['to@example.com'])
msg.body = 'Here is the message.'
mail.send(msg)
注意:上述代码仅供参考,你可能需要根据你的实际情况进行修改。例如,使用 smtplib 模块时需要指定 SMTP 服务器的地址,使用 Flask-Mail 库时需要在 Flask 应用中配置 Flask-Mail。