首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WEBScraping TypeError: sendmail()缺少一个必需的位置参数:'msg‘

WEBScraping TypeError: sendmail()缺少一个必需的位置参数:'msg‘
EN

Stack Overflow用户
提问于 2020-02-25 10:48:06
回答 1查看 506关注 0票数 1

我的代码有错误。和gmail有联系吗?或者我的代码还有其他问题?你能告诉我怎么解决这个问题吗?

169.9

Garmin Forerunner 735 and多端口和运行监视,黑色/灰色跟踪(最近一次调用):

文件"C:\Users\User\source\repos\RCS_WEB_SCRAPER\RCS_WEB_SCRAPER\RCS_WEB_SCRAPER.py",第52行,在check_price()中

文件"C:\Users\User\source\repos\RCS_WEB_SCRAPER\RCS_WEB_SCRAPER\RCS_WEB_SCRAPER.py",第29行,在check_price send_mail()中

文件"C:\Users\User\source\repos\RCS_WEB_SCRAPER\RCS_WEB_SCRAPER\RCS_WEB_SCRAPER.py",第46行,在send_mail msg中

TypeError: sendmail()缺少一个必需的位置参数:'msg‘

我的代码

代码语言:javascript
复制
import requests
from bs4 import BeautifulSoup
import smtplib
import time


URL = 'https://www.amazon.co.uk/Garmin-Forerunner-735XT-Multisport-Running-Black-Grey/dp/B01DWIY39A/ref=sr_1_3?keywords=garmin&qid=1582615813&sr=8-3'

headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}


def check_price():
    page = requests.get(URL, headers=headers)

    soup = BeautifulSoup(page.content, 'html.parser')

    title = soup.find(id ="productTitle").get_text()
    price = soup.find(id="priceblock_dealprice").get_text()
    converted_price = float(price[1:6])

    if(converted_price < 160.00):
        send_mail()

    print(converted_price)
    print(title.strip())

    if(converted_price > 160.00):
        send_mail()

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

    server.login('address', 'mAJnkzjfTqw8xJe')

    subject = 'Price decreased!'
    body = 'Now it is time to buy: https://www.amazon.co.uk/Garmin-Forerunner-735XT-Multisport-Running-Black-Grey/dp/B01DWIY39A/ref=sr_1_3?keywords=garmin&qid=1582615813&sr=8-3'

    msg = f"Subject: {subject}\n\n{body}"

    server.sendmail(
        'address@gmail.com',
        msg 
    )
    print('E-mail has been sent!')
    server.quit()

while(True):
    check_price()
    time.sleep(28800)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-25 11:12:26

Sendmail需要将3个参数传递给它。一个from地址,一个to地址列表,以及一条要发送的消息。

来自文档https://docs.python.org/3/library/smtplib.html#smtplib.SMTP.sendmail

所需的参数是RFC 822从地址字符串、RFC 822到地址字符串的列表(裸字符串将被视为具有1个地址的列表)和消息字符串。

您需要更新调用server.sendmail的代码,以包含from地址和to address,然后包括msg。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60392844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档