#!/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
 {sunrise}  ---------------  {sunset} 



QWeather  ·  Github Repo
""" 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
 {sunrise}  ---------------  {sunset} 



QWeather  ·  Github Repo
""" 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] match status: case 'update': status = '预警更新' Logger.info(f'{self.language["new_warning"]}') case 'active': status = '已有灾害' Logger.info(f'{self.language["warning_updated"]}') case 'cancel': Logger.info(f'{self.language["warning_canceled"]}') mail_html = f""" Warning

{title}

释放时间:{release_time} {level}级

预警状态:{status} 预警类型:{type_} 灾害持续时间:{start_time[:10]}~{end_time[:10]}
{text}




QWeather  ·  Github Repo
""" 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: if status != 'cancel': 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)