Новое в кодировании ... Я уверен, что это будет очевидно, когда вы будете читать дальше.
Я пытаюсь отправить электронные письма для определенных строк в таблице Excel. Это отправляет электронное письмо для первой строки, но оно останавливается.
Я пытался найти ответ в документации pandas, руководствах для YouTube, stackoverflow, книге, которую я читаю "Python Cra sh Курс ". Все безрезультатно.
Мне кажется, что я трачу много времени на поиски ошибок, которые, вероятно, очень просты. Я знаю, что это из-за недостатка опыта, но мне интересно, можете ли вы предложить какие-то основополагающие принципы, которые помогут мне лучше понять, почему скрипт не работает.
Второе, и, вероятно, тем проще, не могли бы вы сказать мне, что я здесь не так сделал. Я считаю, что это связано с неправильной настройкой l oop, но я не смог понять это.
import pandas as pd
import smtplib
your_name = "XXXXXX"
your_email = "XXXXX@gmail.com"
gmail_password = input("Type your password and hit enter:")
# If you are using something other than gmail
# then change the 'smtp.gmail.com' and 465 in the line below
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(your_email, gmail_password)
recovery_sheet = pd.read_excel(r"C:\Users\xxx\Desktop\PythonSpreadsheetTutorial\Spreadsheet.xlsx")
due_dates = recovery_sheet[["Client", "Staff", "Form Type", "Days Until Due", "Email Address"]]
due_in_10 = due_dates[due_dates["Days Until Due"]==10]
# Get all the Names, Email Addresses, Subjects and Messages
all_clients = due_in_10['Client']
all_staff = due_in_10['Staff']
all_types = due_in_10['Form Type']
all_due_dates = due_in_10['Days Until Due']
all_emails = due_in_10['Email Address']
# Loop through the emails
for idx in range(len(all_emails)):
# Get each records name, email, subject and message
client = all_clients[idx]
staff = all_staff[idx]
form_type = all_types[idx]
days_until_due = all_due_dates[idx]
email_address = all_emails[idx]
# Creating the Subject Heading and Message
subject = f"The {form_type} Is Due In {days_until_due} Days For {client.upper()}"
message = f"Hi {staff.title()}, \n\nThe {form_type} is due in {days_until_due} days for {client.upper()}. Please turn it in before the due date. \n\nThanks, \n\nJudy"
# Create the email to send
full_email = ("From: {0} <{1}>\n"
"To: {2} <{3}>\n"
"Subject: {4}\n\n"
"{5}"
.format(your_name, your_email, staff, email_address, subject, message))
# In the email field, you can add multiple other emails if you want
# all of them to receive the same text
try:
server.sendmail(your_email, [email_address], full_email)
print('Email to {} successfully sent!\n\n'.format(email_address))
except Exception as e:
print('Email to {} could not be sent :( because {}\n\n'.format(email_address, str(e)))
# Close the smtp server
server.close()
Вот ошибка, которую я получаю:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-13-68c9da5cc87a> in <module>
11
12 # Get each records name, email, subject and message
---> 13 client = all_clients[idx]
14 staff = all_staff[idx]
15 form_type = all_types[idx]
~\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
869 key = com.apply_if_callable(key, self)
870 try:
--> 871 result = self.index.get_value(self, key)
872
873 if not is_scalar(result):
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
4403 k = self._convert_scalar_indexer(k, kind="getitem")
4404 try:
-> 4405 return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
4406 except KeyError as e1:
4407 if len(self) > 0 and (self.holds_integer() or self.is_boolean()):
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()
pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()
pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()
KeyError: 1
Заранее благодарим за любую помощь, которую вы можете предложить!