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. Java并发编程:Callable、Future和FutureTask 实现龟兔赛跑

    1.不清楚的看博客http://www.cnblogs.com/dolphin0520/p/3949310.html 我们使用上面的代码来实现一个龟兔赛跑 package com.weiyuan.te ...

  2. Git报错信息

    1. 解决办法: 当在最后提交的时候,出现的错误. 解决办法: git remote rm origin 执行下面代码: git remote add origin https://github.co ...

  3. ES6躬行记 笔记

    ES6躬行记(18)--迭代器 要实现以下接口## next() ,return,throw 可以用for-of保证迭代对象的正确性 例如 var str = "向

  4. Linux中清空docker容器日志

    新建文件docker-clear-log,放在/usr/local/bin/目录下,文件内容如下: #!/bin/bash -e if [[ -z $ ]]; then echo "No c ...

  5. C#操作SharePoint文档库文档

    using (Stream file = spFile.OpenBinaryStream()) { //其余代码 }

  6. 轻松让HTML5可以显示桌面通知Notification非常实用

    使用Notification的流程 1.检查浏览器是否支持Notification2.检查浏览器的通知权限3.如果权限不够则申请获取权限4.创建消息通知5.展示消息通知 Notification AP ...

  7. pdf流文件转图片

    需求:将后台返回的pdf流文件转换成图片与页面其他内容一起打印pdf流文件不能直接在前台显示,需要借助pdf.js+viewer.js. 一般情况下,如果要打印pdf流文件,可以直接在新打开的view ...

  8. cin cout 的优化(神优化)外号:神读入

    在比赛里,经常出现数据集超大造成 cin TLE的情况.这时候大部分人(包括原来我也是)认为这是cin的效率不及scanf的错,甚至还上升到C语言和C++语言的执行效率层面的无聊争论.其实像上文所说, ...

  9. 【题解】p2388阶乘之乘

    原题传送门 题解一堆\(O(n)\)算法真给我看傻了. 考虑\(10=2*5\),因子2肯定更多,所以计算因子5的个数即可. 从5到n这\(n-5+1\)个数的阶乘里面,都各自含有一个因子\(5=1* ...

  10. day62 django入门(3)

    目录 一.无名有名分组的反向解析 1 无名分组的反向解析 2 有名分组的反向解析 二.路由分发 三.名称空间(了解) 四.伪静态(了解) 五.虚拟环境(了解) 六.django版本区别 1 url的区 ...