五分钟快速搭建 Serverless 免费邮件服务
1. 引言
本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处。
该服务可以每月免费发送2,5000封,这是完全白嫖啊,感兴趣的,赶紧动起你的小手爪,噼里啪啦搞起来呀。
2. 创建 SendGrid 账号
你要有一个Azure账号,没有的话,花几分钟自行注册一个就好。(我的账号注册在香港区域)
咱们先来创建一个SendGrid Accounts,如下图所示。点击SendGrid Accounts后,再点击创建SendGrid account。


填写完毕后,点击Review+Create,稍等片刻,提示部署成功,那么恭喜你,可以接着往下玩耍了。如果部署失败,可能会因为SendGrid屏蔽了某些区域的账号创建,就只能重新注册个Azure账号玩耍了。
紧接着,前往刚刚创建的SendGrid Account,点击Manage会跳转至SendGrid管理面板。

打开后,会要求你进去邮件验证,自行前往邮箱验证即可。

点击API Keys,然后点击Create API Key,填写API Key Name,选择 Full Access,点击Create&View,记下生成的API Key,后面需要用到。

3. 创建第一个函数应用
回到Azure控制台,然后搜索函数应用。

打开后点击添加,按以下图示进行创建。其中务必选择以代码发布,承载的操作系统选择Windows。

创建成功后,转到资源,如下图所示:

依次点击函数,添加,选择HTTP trigger模板,填写函数名称,然后指定身份验证级别。

点击创建,创建成功后,跳转到函数页面,点击获取函数URL,粘贴URL到浏览器就可以访问到你创建的第一个函数应用。

点击代码+测试,就可以看到模板代码,如下图所示:

从截图来看,这个和C#的语法并无太大差别,官方称为C#脚本。
紧接着替换run.csx为以下代码并点击保存:
//run.csx
#r "Newtonsoft.Json"
#r "SendGrid"
using System.Net;
using Microsoft.Azure.WebJobs.Host;
using SendGrid.Helpers.Mail;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static SendGridMessage Run(Email req, ILogger log)
{
var reqStr = JsonConvert.SerializeObject(req);
log.LogInformation(reqStr);
var message = new SendGridMessage();
message.AddTo(req.To);
message.AddContent("text/html", req.Body);
message.SetFrom(new EmailAddress(req.From));
message.SetSubject(req.Subject);
return message;
}
public class Email
{
public string To { get; set; }
public string From { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
然后修改function.json中的配置如下,并保存。
{
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in",
"methods": [
"get",
"post"
]
},
{
"type": "sendGrid",
"name": "$return",
"direction": "out",
"apiKey": "SendGridAPIKeyAsAppSetting"
}
]
}
注意观察配置项中需要指定apiKey,就是我们上面创建SendGrid Account 中对应的ApiKey。回到上面创建的Azure Function 应用服务,然后按下图添加上面发邮件函数需要的配置项,如下所示。

添加完毕后,再回到函数中就可以测试运行了,如下图所示:

查收邮件,你将收到来自Azure Function & SendGrid 的免费问候。

当然,也可以通过Postman自行验证:

4.最后
通过以上的连环操作,相信你不仅成功薅了一把微软的羊毛,而且顺带对Serverless也有了一定的认知。
如果对Azure Function感兴趣的,不妨参考官方文档研究一番,相信你会发掘不少玩法,顺便再薅它几把羊毛,哈哈哈!
五分钟快速搭建 Serverless 免费邮件服务的更多相关文章
- 五分钟快速搭建Serverless免费邮件服务
1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...
- 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画
原文:零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形 ...
- 云上快速搭建Serverless AI实验室
Serverless Kubernetes和ACK虚拟节点都已基于ECI提供GPU容器实例功能,让用户在云上低成本快速搭建serverless AI实验室,用户无需维护服务器和GPU基础运行环境,极大 ...
- 只需五分钟-用Maven快速搭建Spring Cloud微服务
Maven安装手册 1.准备安装包 安装包: apache-maven-3.5.4-bin.zip (最好JDK 1.7及以上版本) 集成包: eclipse-maven3-plugin.zip 2 ...
- 30分钟快速搭建Web CRUD的管理平台--django神奇魔法
加上你的准备的时间,估计30分钟完全够用了,因为最近在做爬虫管理平台,想着快速开发,没想到python web平台下有这么非常方便的框架,简洁而优雅.将自己的一些坑总结出来,方便给大家的使用. 准备环 ...
- 快速搭建 Serverless 在线图片处理应用
作者:倚贤 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数 ...
- 巨杉Tech | 十分钟快速搭建 Wordpress 博客系统
介绍 很多互联网应用程序开发人员第一个接触到的网站项目就是博客系统.而全球使用最广的Wordpress常常被用户用来快速搭建个人博客网站.默认情况下,Wordpress一般在后台使用MySQL关系型数 ...
- 5分钟快速搭建一个springboot的项目
现在开发中90%的人都在使用springboot进行开发,你有没有这样的苦恼,如果让你新建一个springboot开发环境的项目,总是很苦恼,需要花费很长时间去调试.今天来分享下如何快速搭建. 一 ...
- 快速搭建 Serverless 人脸识别离线服务
简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
随机推荐
- elasticsearch 之 深入探秘type底层数据结构
1.理论知识 type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的value,在底层的lucene中建立索引 ...
- Python3-paramiko模块-基于SSH的远程连接模块
Python3中的paramiko模块,基于SSH用于连接远程服务器并执行相关操作 http://docs.paramiko.org/en/2.1/ SSHClient 用于连接远程服务器并执行基本命 ...
- 新版MySQL开始使用时遇到的问题(时区、权限):
新版MySQL(本人Server version: 8.0.15)在刚开始使用时遇到的问题: 查看mysql安装版本:命令窗口 时区问题解决(The server time zone value 'Ö ...
- P4817 Fruit Feast G
最开始拿到这道题的时候,题目中其实只规定了两种水果的饱食度,可以理解成价值或是重量,在不超过T的情况求最大值.第一眼看过去感觉就是装箱问题(背包),只不过这道题用的是完全背包,但是考虑到喝水的情况,做 ...
- 注解式HTTP请求Feign (F版)
Spring Cloud 为开发者提供了在分布式系统中的一些常用的组件(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,决策竞选,分布式会话集群状态).使用Sprin ...
- ShuffleNetV1/V2简述 | 轻量级网络
ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...
- Mybatis源码初探——优雅精良的骨架
@ 目录 前言 精良的Mybatis骨架 宏观设计 基础支撑 日志 日志的加载 日志的使用 数据源 数据源的创建 池化技术原理 数据结构 获取连接 回收连接 缓存 缓存的实现 CacheKey 反射 ...
- 线性dp打鼹鼠
题目大意 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个 的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气.你可 ...
- day35 作业
服务端 import subprocess import struct import json from socket import * server = socket(AF_INET, SOCK_S ...
- Python模块02/序列化/os模块/sys模块/haslib加密/collections
Python模块02/序列化/os模块/sys模块/haslib加密/collections 内容大纲 1.序列化 2.os模块 3.sys模块 4.haslib加密 5.collections 1. ...