diff --git a/core/sendmail.py b/core/sendmail.py
new file mode 100644
index 0000000..fca499a
--- /dev/null
+++ b/core/sendmail.py
@@ -0,0 +1,406 @@
+#!/usr/bin/env python3
+# -- coding:utf-8 --
+# @Author: markushammered@gmail.com
+# @Development Tool: PyCharm
+# @Create Time: 2021/12/16
+# @File Name: sendmail.py
+
+
+import sys
+import smtplib
+from email.mime.image import MIMEImage
+from email.mime.multipart import MIMEMultipart
+from email.header import Header
+from email.mime.text import MIMEText
+from core.logger import Logger
+from core.language import Language
+from core.information import WeatherInfo
+from core.read_config import read_config
+
+
+class Mail:
+ def __init__(self):
+ self.settings = read_config()
+ self.language = Language()
+ self.enableSSL = self.settings[2]['SSL']
+ self.server = self.settings[0]['server']
+ self.port = self.settings[0]['port']
+ self.password = self.settings[0]['password']
+ self.sender = self.settings[0]['sender']
+ self.receiver = self.settings[1]['receiver']
+ self.city_name = self.settings[3]['city-name']
+ self.message = MIMEMultipart('related')
+ self.message['From'] = Header('QWeather') # 发件人名称
+ self.message['To'] = Header('All allowed User') # 收件人显示名称
+ self.msg_content = MIMEMultipart('alternative') # 文字目录
+
+ if self.enableSSL:
+ self.smtp = smtplib.SMTP_SSL(self.server, self.port) # 登录服务器 使用SSL连接
+ else:
+ self.smtp = smtplib.SMTP(self.server, self.port) # 登录邮箱服务器 不使用SSL连接
+
+ def dev_version(self):
+ dev_weather = WeatherInfo().dev_version()
+ dates = dev_weather[0]
+ day_weathers = dev_weather[1]
+ night_weathers = dev_weather[2]
+ highest_temps = [3]
+ lowest_temps = dev_weather[4]
+ icons = dev_weather[5]
+ sunset = dev_weather[6]
+ sunrise = dev_weather[7]
+ humidity = dev_weather[8]
+ wind_speed = dev_weather[9]
+ wind_scale = dev_weather[10]
+ wind_dir = dev_weather[11]
+ uv_index = dev_weather[12]
+ cloud = dev_weather[13]
+ pressure = dev_weather[14]
+ vis = dev_weather[15]
+
+ mail_html = f"""
+
+
+
+ 地区:{self.city_name}
+
+ 发送者:{self.sender}
+
+
+
+
+
+
+ | | 日期 |
+ | 天气 |
+ | 最低温度 |
+ | 最高温度 |
+
+
+
+ | 今天 |
+ {day_weathers[0]} /{night_weathers[0]} | {lowest_temps[0]}℃ |
+ {highest_temps[0]}℃ |
+
+
+ | {dates[1]} |
+ {day_weathers[1]} /{night_weathers[1]} | {lowest_temps[1]}℃ |
+ {highest_temps[1]}℃ |
+
+
+ | {dates[2]} |
+ {day_weathers[2]} /{night_weathers[2]} | {lowest_temps[2]}℃ |
+ {highest_temps[2]}℃ |
+
+
+ | {dates[3]} |
+ {day_weathers[3]} /{night_weathers[3]} | {lowest_temps[3]}℃ |
+ {highest_temps[3]}℃ |
+
+
+ | {dates[4]} |
+ {day_weathers[4]} /{night_weathers[4]} | {lowest_temps[4]}℃ |
+ {highest_temps[4]}℃ |
+
+
+ | {dates[5]} |
+ {day_weathers[5]} /{night_weathers[5]} | {lowest_temps[5]}℃ |
+ {highest_temps[5]}℃ |
+
+
+ | {dates[6]} |
+ {day_weathers[6]} /{night_weathers[6]} | {lowest_temps[6]}℃ |
+ {highest_temps[6]}℃ |
+
+
+
+
+ | |
+
+
+ | 风 |
+ 相对湿度 |
+ 紫外线 |
+
+
+ | {wind_speed}m/s {wind_scale} {wind_dir} |
+ {humidity}% |
+ {uv_index} |
+
+
+ | |
+
+
+ | 能见度 |
+ 大气压强 |
+ 相对云量 |
+
+
+ | {vis}km |
+ {pressure}hPa |
+ {cloud}% |
+
+
+
+
+ | |
+
+
+  |
+ |
+  |
+
+
+ | {sunrise} |
+ --------------- |
+ {sunset} |
+
+
+ """
+ self.message['Subject'] = '七天天气预报' # 邮件标题
+ self.message.attach(MIMEText(mail_html, 'html', 'utf-8'))
+
+ image_count = 1
+ for image_resource in icons:
+ with open(f'./res/icons/{image_resource}.png', 'rb') as fp:
+ MyImage = MIMEImage(fp.read())
+ MyImage.add_header('Content-ID', f'img{image_count}')
+ self.message.attach(MyImage)
+ image_count += 1
+
+ with open('./res/basic-resources/sunrise.png', 'rb') as sr_f:
+ sunrise_img = MIMEImage(sr_f.read())
+ sunrise_img.add_header('Content-ID', 'sunrise')
+ self.message.attach(sunrise_img)
+ with open('./res/basic-resources/sunset.png', 'rb') as ss_f:
+ sunset_img = MIMEImage(ss_f.read())
+ sunset_img.add_header('Content-ID', 'sunset')
+ self.message.attach(sunset_img)
+
+ try:
+ self.smtp.login(self.sender, self.password) # 登录
+ self.smtp.sendmail(self.sender, self.receiver, self.message.as_string()) # 发送
+ Logger.info(f'{self.language["mail_succeed"]}')
+ except smtplib.SMTPException as e: # 处理错误
+ Logger.critical(f'{self.language["mail_error"]}: {e}')
+ sys.exit(1)
+
+ def free_version(self):
+ free_weather = WeatherInfo().free_version()
+ dates = free_weather[0]
+ day_weathers = free_weather[1]
+ night_weathers = free_weather[2]
+ highest_temps = [3]
+ lowest_temps = free_weather[4]
+ icons = free_weather[5]
+ sunset = free_weather[6]
+ sunrise = free_weather[7]
+ humidity = free_weather[8]
+ wind_speed = free_weather[9]
+ wind_scale = free_weather[10]
+ wind_dir = free_weather[11]
+ uv_index = free_weather[12]
+ cloud = free_weather[13]
+ pressure = free_weather[14]
+ vis = free_weather[15]
+
+ mail_html = f"""
+
+
+
+ 地区:{self.city_name}
+
+ 发送者:{self.sender}
+
+
+
+
+
+
+ | | 日期 |
+ | 天气 |
+ | 最低温度 |
+ | 最高温度 |
+
+
+
+ | 今天 |
+ {day_weathers[0]} /{night_weathers[0]} | {lowest_temps[0]}℃ |
+ {highest_temps[0]}℃ |
+
+
+ | {dates[1]} |
+ {day_weathers[1]} /{night_weathers[1]} | {lowest_temps[1]}℃ |
+ {highest_temps[1]}℃ |
+
+
+ | {dates[2]} |
+ {day_weathers[2]} /{night_weathers[2]} | {lowest_temps[2]}℃ |
+ {highest_temps[2]}℃ |
+
+
+
+ | |
+
+
+ | 风 |
+ 相对湿度 |
+ 紫外线 |
+
+
+ | {wind_speed}m/s {wind_scale} {wind_dir} |
+ {humidity}% |
+ {uv_index} |
+
+
+ | |
+
+
+ | 能见度 |
+ 大气压强 |
+ 相对云量 |
+
+
+ | {vis}km |
+ {pressure}hPa |
+ {cloud}% |
+
+
+
+
+ | |
+
+
+  |
+ |
+  |
+
+
+ | {sunrise} |
+ --------------- |
+ {sunset} |
+
+
+ """
+ self.message['Subject'] = '三天天气预报' # 邮件标题
+ self.message.attach(MIMEText(mail_html, 'html', 'utf-8'))
+
+ image_count = 1
+ for image_resource in icons:
+ with open(f'./res/icons/{image_resource}.png', 'rb') as fp:
+ MyImage = MIMEImage(fp.read())
+ MyImage.add_header('Content-ID', f'img{image_count}')
+ self.message.attach(MyImage)
+ image_count += 1
+
+ with open('./res/basic-resources/sunrise.png', 'rb') as sr_f:
+ sunrise_img = MIMEImage(sr_f.read())
+ sunrise_img.add_header('Content-ID', 'sunrise')
+ self.message.attach(sunrise_img)
+ with open('./res/basic-resources/sunset.png', 'rb') as ss_f:
+ sunset_img = MIMEImage(ss_f.read())
+ sunset_img.add_header('Content-ID', 'sunset')
+ self.message.attach(sunset_img)
+
+ try:
+ self.smtp.login(self.sender, self.password) # 登录
+ self.smtp.sendmail(self.sender, self.receiver, self.message.as_string()) # 发送
+ Logger.info(f'{self.language["mail_succeed"]}')
+ except smtplib.SMTPException as e: # 处理错误
+ Logger.critical(f'{self.language["mail_error"]}: {e}')
+ sys.exit(1)
+
+ def warning_(self):
+ info = WeatherInfo().warning_()
+ release_time = info[0]
+ title = info[1]
+ status = info[2]
+ level = info[3]
+ type_ = info[4]
+ text = info[5]
+ start_time = info[6]
+ end_time = info[7]
+
+ mail_html = f"""
+
+
+
+
+ Warning
+
+
+
+
{title}
+
释放时间:{release_time} {level}级
+
+ 预警状态:{status} 预警类型:{type_} 灾害持续时间:{start_time[:10]}~{end_time[:10]}
+
+ {text}
+
+
+
+
+
+ """
+ self.message['Subject'] = '自然灾害预警' # 邮件标题
+ self.message.attach(MIMEText(mail_html, 'html', 'utf-8'))
+
+ with open('./res/basic-resources/sunrise.png', 'rb') as sr_f:
+ sunrise_img = MIMEImage(sr_f.read())
+ sunrise_img.add_header('Content-ID', 'sunrise')
+ self.message.attach(sunrise_img)
+ with open('./res/basic-resources/sunset.png', 'rb') as ss_f:
+ sunset_img = MIMEImage(ss_f.read())
+ sunset_img.add_header('Content-ID', 'sunset')
+ self.message.attach(sunset_img)
+
+ try:
+ self.smtp.login(self.sender, self.password) # 登录
+ self.smtp.sendmail(self.sender, self.receiver, self.message.as_string()) # 发送
+ Logger.info(f'{self.language["mail_succeed"]}')
+ except smtplib.SMTPException as e: # 处理错误
+ Logger.critical(f'{self.language["mail_error"]}: {e}')
+ sys.exit(1)