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 免费邮件服务的更多相关文章

  1. 五分钟快速搭建Serverless免费邮件服务

    1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...

  2. 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画

    原文:零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形动画 零元学Expression Blend 4 - Chapter 42 五分钟快速完成扇形变圆形 ...

  3. 云上快速搭建Serverless AI实验室

    Serverless Kubernetes和ACK虚拟节点都已基于ECI提供GPU容器实例功能,让用户在云上低成本快速搭建serverless AI实验室,用户无需维护服务器和GPU基础运行环境,极大 ...

  4. 只需五分钟-用Maven快速搭建Spring Cloud微服务

    Maven安装手册 1.准备安装包 安装包: apache-maven-3.5.4-bin.zip  (最好JDK 1.7及以上版本) 集成包: eclipse-maven3-plugin.zip 2 ...

  5. 30分钟快速搭建Web CRUD的管理平台--django神奇魔法

    加上你的准备的时间,估计30分钟完全够用了,因为最近在做爬虫管理平台,想着快速开发,没想到python web平台下有这么非常方便的框架,简洁而优雅.将自己的一些坑总结出来,方便给大家的使用. 准备环 ...

  6. 快速搭建 Serverless 在线图片处理应用

    作者:倚贤 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数 ...

  7. 巨杉Tech | 十分钟快速搭建 Wordpress 博客系统

    介绍 很多互联网应用程序开发人员第一个接触到的网站项目就是博客系统.而全球使用最广的Wordpress常常被用户用来快速搭建个人博客网站.默认情况下,Wordpress一般在后台使用MySQL关系型数 ...

  8. 5分钟快速搭建一个springboot的项目

      现在开发中90%的人都在使用springboot进行开发,你有没有这样的苦恼,如果让你新建一个springboot开发环境的项目,总是很苦恼,需要花费很长时间去调试.今天来分享下如何快速搭建. 一 ...

  9. 快速搭建 Serverless 人脸识别离线服务

    简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

随机推荐

  1. JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现

    我们按照表示的设计 以及: package com.weiyuan.goods.category.domain; import java.util.List; public class Categor ...

  2. 题解 - 【NOI2015】维修数列

    题面大意: 使用平衡树维护一个数列,支持插入,修改,删除,翻转,求和,求最大和这 \(6\) 个操作. 题意分析: Splay 裸题,几乎各种操作都有了,这个代码就发给大家当个模板吧. 最后求最大和的 ...

  3. Python3-shutil模块-高级文件操作

    Python3中的shutil模块提供了对文件和容器文件的一些高级操作 shutil.copy(src, dst) 拷贝文件,src和dst为路径的字符串表示,copy()会复制文件数据和文件权限,但 ...

  4. QT5 解析JSON文件

    QT读JSON文件步骤,这里把过程记录一下,网上大多都是怎么写json的,对于读的,记录的不多 首先JSON文件格式必须为UTF-8(非UTF-8 with BOM),UTF-8 with BOM 即 ...

  5. WAF产品记录

    WAF产品化 2011-1-13 目标:稳定的版本 和 标准的手册   1.硬件差异问题,争取了OEM提供硬件样机. 2.OEM功能本来在我们手里,为了更好产品化,配合移交工作. 3.我们做好 产品生 ...

  6. METS介绍

    METS介绍 首页  >  关于METS > METS介绍   医护英语水平考试(Medical English Test System, 以下简称:METS)是由教育部考试中心与中国国际 ...

  7. P2136 拉近距离

    我也想有这样的爱情故事,可惜我单身 其实这道题就是一个比较裸的最短路问题.对于一个三元组 (S,W,T) ,S其实就是一个端点,而W就是到达的端点,连接两个端点的边长为-T,注意要取一个相反数,这样才 ...

  8. 命令 关闭SElinux

    # sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config

  9. 如何使用JS操纵伪元素

    css引入伪类和伪元素概念是为了格式化文档树以外的信息.也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或者是列表中的第一个元素. 伪类 用于当已有元素处于的某个状态时 ...

  10. elasticsearch 单节点搭建与爬坑记录

    elasticsearch 单节点搭建与爬坑记录   prepare   虚拟机或者云服务器(这里用的是阿里云ECS) linux---centos7 安装完毕的jdk 相应的安装包(在https:/ ...