Python 3.x Webscaping类型错误:sendmail()缺少1个必需的位置参数:';味精';

Python 3.x Webscaping类型错误:sendmail()缺少1个必需的位置参数:';味精';,python-3.x,web-scraping,beautifulsoup,smtplib,Python 3.x,Web Scraping,Beautifulsoup,Smtplib,我的代码中有一个错误。与gmail的连接有问题吗?或者我的代码还有其他问题? 你能告诉我怎么解决这个问题吗 169.9 Garmin Forerner 735XT GPS多端口和跑步手表,黑色/灰色回溯(最近一次呼叫最后一次): 文件“C:\Users\User\source\repos\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER.py”,第52行,在check\u price()中 文件“C:\Users\User\s

我的代码中有一个错误。与gmail的连接有问题吗?或者我的代码还有其他问题? 你能告诉我怎么解决这个问题吗

169.9
Garmin Forerner 735XT GPS多端口和跑步手表,黑色/灰色回溯(最近一次呼叫最后一次):
文件“C:\Users\User\source\repos\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER.py”,第52行,在check\u price()中
文件“C:\Users\User\source\repos\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER.py”,第29行,在check\u price send\u mail()中 文件“C:\Users\User\source\repos\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER\RCS\u WEB\u SCRAPER.py”,第46行,发送邮件消息
TypeError:sendmail()缺少1个必需的位置参数:“msg”

我的代码

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)

导入请求
从bs4导入BeautifulSoup
导入smtplib
导入时间
URL='1〕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'
标题={
“用户代理”:“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\u dealprice”).get\u text()
转换价格=浮动(价格[1:6])
如果(换算价格<160.00):
发送邮件
打印(换算价格)
打印(title.strip())
如果(换算价格>160.00):
发送邮件
def send_mail():
server=smtplib.SMTP('SMTP.gmail.com',587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('address','mAJnkzjfTqw8xJe')
主题='价格下降!'
body='现在是购买的时候了: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}\n\n{body}”
server.sendmail(
'address@gmail.com',
味精
)
打印('电子邮件已发送!')
server.quit()
虽然(正确):
核对价格
睡眠时间(28800)

Sendmail需要向其传递3个参数。发件人地址、收件人地址列表和要发送的邮件

从文件中

所需参数是RFC 822 from地址字符串,一个 RFC 822地址字符串(裸字符串将被视为列表 带有1个地址)和一个消息字符串


您需要在调用server.sendmail的地方更新代码,以包括发件人地址和收件人地址,然后是您的消息。

显示所有代码,您粘贴的代码只有35行,但堆栈跟踪指的是第52行和第46行。运行粘贴的代码不会导致错误您不会为堆栈跟踪显示错误来源的函数
check\u price send\u mail()
显示任何代码from@ChrisDoyle已添加完整代码。您只需向服务器发送2个参数。请发送电子邮件地址和消息。但是sendmail需要3个参数,from address,to address,message。所以python告诉您没有传递消息。因为它采用了您传递的前两个参数,即from address和to address,请参见此处的文档。它说明……
所需的参数是一个RFC 822 from地址字符串、一个RFC 822 to地址字符串列表(一个裸字符串将被视为一个带有1个地址的列表)和一个消息字符串。
谢谢,我终于明白了这一点。:)