在过去,大家只能靠写信来沟通,一封信往往要寄好几天甚至好几周才能送到。有了电子邮件之后,一切都变得不一样了。电子邮件让信息能够即时传递,而且非常可靠。从那以后,企业就开始用电子邮件跟客户沟通、更新交易信息、做市场营销,因为他们知道电子邮件传递信息又快又方便,还能直接跟客户联系。对于开发者来说,把电子邮件功能集成到应用程序里已经变得非常重要了。AWS (Amazon Web Services)提供了一个强大且廉价的解决方案,让开发人员可以在他们的 Django 应用程序中自动化和简化通信。
什么是Django?Django 是一个免费的开源 Python web 框架,它的目标是简化复杂的数据库驱动网站的创建。它强调可重用性、快速开发和干净的设计。Django 可以处理很多常见的 web 开发任务,让开发人员可以专注于应用程序的独特功能。我觉得 Django 是启动 web 应用程序的最快方式。
什么是AWS?AWS 是亚马逊网络服务(Amazon Web Services)的缩写,它是一个综合性的云计算平台,提供超过 200 种服务。它为个人、企业和政府提供按需资源,如计算能力、存储、数据库和机器学习工具。AWS 采用随用随付模式,允许用户根据自己的需求扩展资源。
设置Amazon SES(简单的电子邮件服务)进入亚马逊官网,订阅配置相关服务。--教程在官网有。这个简单就略过
设置Django项目创建文件夹并激活虚拟环境:mkdir DjangoSES && cd DjangoSESpython -m venv venv# For Unix and Linuxsource venv/bin/activate安装必要的软件包或依赖项pip install django boto3 python-dotenv创建Django项目和Django应用程序# Creating the Django projectdjango-admin startproject aws_ses .# We create an application for the projectpython manage.py startapp emailer此时使用“tree -I "venv|__pycache__" ”指令查看项目结果,项目结构为:
. ├── aws_ses │ ├── __init__.py │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── emailer │ ├── __init__.py │ ├── admin.py │ ├── apps.py+ │ ├── forms.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py+ │ ├── urls.py+ │ ├── utils.py │ └── views.py ├── manage.py └── requirements.txt ├── static └── templates+ └── .env运行项目python manage.py runserver运行指令之后浏览器访问应该为下图所示:
为项目编写一些utils函数发送电子邮件的函数# .envAWS_ACCESS_KEY_ID=your_access_key_idAWS_SECRET_ACCESS_KEY=your_secret_access_keyAWS_REGION_NAME=your_aws_region# aws_ses/settings.pyimport osfrom dotenv import load_dotenvload_dotenv()AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID')AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY')AWS_REGION_NAME = os.getenv('AWS_REGION_NAME')DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL')# emailer/utils.pyimport boto3from botocore.exceptions import ClientErrorfrom django.conf import settingsdef send_ses_email(recipient, subject, body_text, body_html=None): client = boto3.client('ses', region_name=settings.AWS_REGION_NAME) try: response = client.send_email( Destination={ 'ToAddresses': [recipient], }, Message={ 'Body': { 'Text': { 'Charset': 'UTF-8', 'Data': body_text, }, 'Html': { 'Charset': 'UTF-8', 'Data': body_html, } if body_html else {}, }, 'Subject': { 'Charset': 'UTF-8', 'Data': subject, }, }, Source=settings.DEFAULT_FROM_EMAIL, ) except ClientError as e: print(f"An error occurred: {e.response['Error']['Message']}") return False else: print(f"Email sent! Message ID: {response['MessageId']}") return True