阿里云邮件推送服务

阿里云邮件推送服务

阿里云提供了邮件推送服务,能帮助你轻松实现邮件发送功能。 步骤 开通服务并获取 AccessKey:登录 阿里云控制台,开通邮件推送服务,获取 AccessKey。

安装依赖:使用 Python 时,可通过 pip 安装 aliyun-python-sdk-core 和 aliyun-python-sdk-dm 库。

复制代码
pip install aliyun-python-sdk-core aliyun-python-sdk-dm

编写代码:

要实现发送 CENTOS 目录下所有文件作为邮件附件的功能,你需要对原代码进行扩展。具体来说,要使用阿里云邮件推送服务的 SingleSendMailRequest 发送邮件,并将指定目录下的文件添加为附件。

python 复制代码
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkdm.request.v20151123.SingleSendMailRequest import SingleSendMailRequest
import base64


def get_attachments(folder_path):
    attachments = []
    if os.path.exists(folder_path):
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                try:
                    with open(file_path, 'rb') as f:
                        file_content = f.read()
                        encoded_content = base64.b64encode(file_content).decode('utf-8')
                        attachment = {
                            'FileName': file,
                            'FileContent': encoded_content
                        }
                        attachments.append(attachment)
                except Exception as e:
                    print(f"读取文件 {file_path} 时出错: {e}")
    return attachments


client = AcsClient('<your-access-key-id>', '<your-access-key-secret>', 'cn-hangzhou')

request = SingleSendMailRequest()
request.set_accept_format('json')
request.set_FromAlias("发件人昵称")
request.set_AccountName("发件人邮箱账号")
request.set_ToAddress("收件人邮箱地址")
request.set_Subject("邮件主题")
request.set_TextBody("邮件正文")

# 获取附件列表
folder_path = "CENTOS"
attachments = get_attachments(folder_path)

# 设置附件
if attachments:
    request.set_Attachments(attachments)

try:
    response = client.do_action_with_exception(request)
    print(str(response, encoding='utf-8'))
except ServerException as e:
    print(e)
except ClientException as e:
    print(e)

代码说明: get_attachments 函数:该函数会遍历指定目录(CENTOS)下的所有文件,读取每个文件的内容,并使用 base64 进行编码。

最后将文件名和编码后的文件内容作为一个字典添加到附件列表中。

设置附件:在创建 SingleSendMailRequest 对象后,调用 get_attachments 函数获取附件列表。如果附件列表不为空,则使用 request.set_Attachments(attachments) 方法将附件添加到邮件请求中。

注意事项: 要将 <your-access-key-id> 和 <your-access-key-secret> 替换为你的阿里云 AccessKey ID 和 Secret。 要将 "发件人昵称"、"发件人邮箱账号"、"收件人邮箱地址"、"邮件主题" 和 "邮件正文" 替换为实际的信息。

确保 CENTOS 目录存在于脚本所在的目录中,或者根据实际情况修改 folder_path。

阿里云邮件推送服务对附件大小和数量可能有一定限制,具体请参考阿里云官方文档。


成熟的开源邮件服务器 在实际生产环境中,自己开发一个完备且安全的邮件服务器是非常复杂的,一般会选择使用已经成熟的开源邮件服务器软件,以下为你介绍几种:

  1. Postfix Postfix 是一款广泛使用的开源邮件传输代理(MTA),具有高度的灵活性和可扩展性,并且在安全性和性能方面表现出色。它与多种操作系统兼容,能和其他邮件组件(如 Dovecot 用于 IMAP/POP3)配合使用。

  2. Exim Exim 是一款功能强大的 MTA,它的配置较为灵活,适合各种规模的邮件系统。Exim 提供了详细的日志记录和强大的过滤功能,有助于管理和监控邮件流量。

  3. Sendmail Sendmail 是历史悠久且经典的 MTA,许多 Unix 和 Linux 系统默认就安装了它。不过,相较于 Postfix 和 Exim,Sendmail 的配置相对复杂。

部署 Postfix + Dovecot 邮件服务器示例问豆包AI。

相关推荐
Renderbus瑞云渲染农场8 小时前
Maya相关插件有哪些?Maya云渲染插件哪些好用?
3d·云计算·3dsmax·maya
GalenZhang88812 小时前
使用frp实现内网穿透并通过阿里云实现域名解析
阿里云·云计算·frp
weixin_3077791312 小时前
采用Amazon SES解决电商邮件延迟:以最小化运维实现最大效率的方案选择
运维·云原生·架构·云计算·aws
weixin_3077791313 小时前
满足游戏应用低延迟和历史查询需求的解决方案
游戏·云原生·架构·云计算·aws
weixin_3077791316 小时前
基于AWS安全组的两层架构访问控制设计与实现
运维·云原生·架构·云计算·aws
G皮T17 小时前
【云计算】云平台权限治理(六):企业项目的管理结构
阿里云·云计算·公有云·混合云·企业项目·vdc·虚拟数据中心
G皮T17 小时前
【云计算】云平台权限治理(五):VDC 的树形管理结构
阿里云·云计算·公有云·混合云·vdc·数据虚拟中心·云治理
一晌小贪欢17 小时前
Streamlit应用如何部署到 Streamlit Community Cloud(保姆级教程)
开发语言·阿里云·部署·部署上线·streamlit应用·streamlit部署
Henry Zhu1231 天前
进阶:VPP NAT44-EI 全面源码解析
网络·物联网·计算机网络·云原生·云计算
Lynnxiaowen1 天前
今天我们继续学习Kubernetes内容pod资源对象
运维·学习·容器·kubernetes·云计算