首页 > 数据库 >postgresql使用sql封装邮箱发送功能

postgresql使用sql封装邮箱发送功能

时间:2024-01-08 21:33:19浏览次数:42  
标签:varchar postgres devel postgresql sql 封装 100 email

 postgresql数据库支持python语言,同样可以封装一下python的邮件发送功能。

        本文假设数据库中存有职员的花名册,对花名册进行遍历发送邮件。

postgresql使用sql封装邮箱发送功能_postgresql


01

数据库安装

安装依赖

yum install -y bison flex readline-devel zlib-devel zlib zlib-devel gcc  gcc-c++ openssl-devel python3  python3-devel libicu-devel ncurses-devel sqlite-devel tk-devel gcc make
yum install -y bison flex readline-devel zlib-devel zlib zlib-devel gcc  gcc-c++ openssl-devel python3  python3-devel libicu-devel ncurses-devel sqlite-devel tk-devel gcc make

为postgres授权

useradd postgres 
vim /etc/sudoers

在101行加入以下内容

postgres ALL=(ALL)     NOPASSWD: ALL
postgres ALL=(ALL)     NOPASSWD: ALL

下载postgresql源码包

wget https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.gz
wget https://ftp.postgresql.org/pub/source/v16.1/postgresql-16.1.tar.gz

解压压缩包

mv postgresql-16.1.tar.gz /home/postgres
su - postgres 
tar -zxf postgresql-16.1.tar.gz
cd postgresql-16.1

编译python支持还是很重要。--with-python 自行构建plpython3u插件

./configure --prefix=/home/postgres/pg --with-openssl  --with-python
make && make install


编辑环境变量

cd 
vim .bash_profile

加入以下环境变量值

source /etc/profile
export PATH=/home/postgres/pg/bin:$PATH 
export PGDATA=/home/postgres/pg/data


加载环境变量

source ~/.bash_profile
source ~/.bash_profile

初始化数据库

initdb -D $PGDATA -U postgres -W 
(输入超级用户密码两次)
pg_ctl start 
pg_ctl status


启动数据库

pg_ctl start
pg_ctl start


创建拓展

postgres=# create extension plpython3u ;
CREATE EXTENSION


02

获取授权码

    

    编写邮箱代码前,需要知道自己发送邮箱的服务器地址等相关信息。

以QQ邮箱为发件人为例,登录QQ邮箱


postgresql使用sql封装邮箱发送功能_postgresql_02


进入设置页面,然后开启pop3服务


此时记住你所获得的授权码

postgresql使用sql封装邮箱发送功能_postgresql_03


作为QQ邮箱相关服务器地址和端口信息

postgresql使用sql封装邮箱发送功能_postgresql_04


我们使用smtp,所以服务器地址是smtp.qq.com   端口使用465



02

编写python进行封装


创建函数,封装具有邮件发送功能的python代码段落


DROP FUNCTION IF EXISTS send_email(m_server varchar(100),port integer , username varchar(100), authcode varchar(100), received varchar(100),content varchar(100));

CREATE OR REPLACE FUNCTION send_email(m_server varchar(100),port integer , username varchar(100), authcode varchar(100), received varchar(100),content varchar(100))
RETURNS varchar(2000)
AS $$

import smtplib
from email.mime.text import MIMEText

#发件箱服务地址
mailserver = m_server

#发件箱服务地址端口
email_port = port

# 发件人
userName_SendMail = username

# 发件人邮箱授权码
userName_AuthCode = authcode

# 收件人
received_mail = received


#邮件正文
emali_content = content

# 纯文本形式的邮件内容的定义,通过MIMEText进行操作,plain为默认的文本的展示形式
email = MIMEText(emali_content, 'plain', 'utf-8')
# 定义邮件主题
email['Subject'] = '你好' 
# 发件人
email['From'] = userName_SendMail
# 收件人
email['To'] = received_mail 


# 链接到右键服务器地址
smtp = smtplib.SMTP_SSL(mailserver, email_port)
smtp.login(userName_SendMail, userName_AuthCode)

# 发送邮件
try:
    smtp.sendmail(userName_SendMail, received_mail, email.as_string())
    smtp.quit()
    return '发送成功'
except Exception as e:
    return str(e)
$$ LANGUAGE plpython3u;


创建一个职员花名册

create table email_text(id serial,name varchar(10),email varchar(100),remark varchar(100));
insert into email_text(name ,email,remark)
values('CM','*******@qq.com','入职成功'),('XHL','*******@qq.com','入职成功'),('WCY','*******@qq.com','入职成功'),('YDH','*******@qq.com','入职成功');

创建一个函数,进行遍历该表花名册信息并执行邮件发送任务

CREATE OR REPLACE FUNCTION for_send_email(m_server varchar(100),port integer , username varchar(100), authcode varchar(100))
RETURNS void
AS $$
DECLARE 
I RECORD;  
return_result VARCHAR(20);
begin
for i in select name,email,remark from email_text loop
select send_email(m_server,port,username,authcode,i.email,i.remark) into return_result;
if return_result='发送成功' 
then
raise notice '%员工已经发送成功',i.name ;
else
raise NOTICE '%员工已经发送失败',i.name ;
end if;
end loop ;
end ;
$$ LANGUAGE plpgsql;

    这里在创建函数的过程中全部使用变量,只在调用函数的过程才会使用实际值,避免数据库明文存储的风险。表中邮件信息的明文存储可以使用权限控制进行规避风险泄露,

select for_send_email('smtp.qq.com','465','填写发件人邮箱','填写发件人的授权码');
select for_send_email('smtp.qq.com','465','填写发件人邮箱','填写发件人的授权码');

postgresql使用sql封装邮箱发送功能_postgresql_05

此时可以看到邮箱已经发送成功。

在邮件发送中也可以附件功能,将表中相关信息附加到邮件中去。

标签:varchar,postgres,devel,postgresql,sql,封装,100,email
From: https://blog.51cto.com/u_16385176/9151164

相关文章

  • 在postgresql中用SQL封装python
    “ 对于一个数据库来说,SQL大家肯定最熟悉不过了。但是作为数据库开发者,我认为数据库不应该只是支持SQL语言。应该支持更多编程语言。比如python、java、c++等更多编程语言,让数据库在多种语言之间的管理、功能上实现最大便捷,这才是未来数据库最大的发展趋势。也是国产数据库在实现......
  • 如何对Azure Database for MySQL进行数据恢复
    如何对AzureDatabaseforMySQL进行数据恢复一般情况下,我们使用Azure中的PaaS数据库产品是时,我们不仅不用关心数据库底层的基础设施部署,同样也不用担心数据库的备份。在AzurePaaS数据库产品中,都内置了数据库备份的功能,作为用户而言,我们不需要为数据库备份这个功能付费,只需要对备......
  • Oracle 23C新特性——SQL防火墙(SQL Firewall)
    一、SQL防火墙功能简介SQL防火墙通过监控和阻止未经授权的SQL和SQL注入来工作。它内置了一系列规则,可以识别和阻止常见的SQL注入,如布尔型注入、报错注入、联合查询注入、堆叠查询注入等。此外,它还可以通过基于角色的访问控制(RBAC)来限制用户的访问权限,从而防止SQL注入。<br/>......
  • Python面向对象三大特性之封装
    【一】面向对象的三大特性面向对象编程有三大特性:封装、继承、多态其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起听起来是不是很熟悉,没错,我们之前所说的”整合“二字其实就是封装的通俗说法。除此之外,针对封装到对象或者类中的属性,我们还可以......
  • 轻松应对面试手撕SQL之TopN问题,数开面试必考系列二(社招校招均适用)
    社会主义打工人即将结束周末(加班一天)的愉快生活,只能说一个字:爽!实在没继续工作的状态,来给大家总结一道面试中大热门的面试题,可以说是top1的:TOPN问题。工作中也会经常遇到这样的业务问题:如何找到每个产品种类下用户最喜欢的产品是哪个?如果找到每个商品下用户点击最多的5个商品是什么?......
  • GaussDB(for MySQL)新特性TDE发布:支持透明数据加密
    本文分享自华为云社区《GaussDB(forMySQL)新特性TDE发布:支持透明数据加密》,作者:GaussDB数据库。技术背景为了保护数据的安全,我们可能通过防火墙、身份认证、安全权限控制、网络及端口访问控制、传输加密等多种方式对程序运行过程中的各个环节进行安全防控,但这些并不能保证数据静......
  • 使用Docker-Compose部署MySQL一主二从同步高可用MHA集群
    (文章目录)......
  • mysql8.0游标
    4、游标4.1、什么是游标虽然我们也可以通过筛选条件WHERE和HAVING,或者是限定返回记录的关键字LIMIT返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是随意定位到某一条记录并对记录的数据进行处理。这个时候,就可以用到游标。游标,提供了一种......
  • date_format mysql 季度
    如何实现“date_formatmysql季度”概述在MySQL中,可以使用DATE_FORMAT函数来格式化日期。但是,该函数并没有直接支持格式化为季度的选项。不过,我们可以通过一些简单的步骤来实现这个功能。本文将向你展示如何实现在MySQL中格式化日期为季度。流程概述下面是实现该功能的大致流......
  • N天爆肝数据库——MySQL(1)
    (N天爆肝数据库——MySQL(1))数据库概念理解==数据库DB存储数据的仓库数据库管理系统DBMS操纵和管理数据库的大型软件==SQL操作关系型数据库的编程语言,定义了用一套操作关系型数据库同意标准学习SQL的作用SQL是一门ANSI的标准计算机语言,用来访问和操作数据库系统。SQ......