如何实现GitHub新仓库创建时自动发送邮件通知?
实现GitHub新仓库创建后自动发送邮件通知的方案
方案一:修改现有仓库创建脚本,添加邮件发送逻辑
直接在你现有的Shell脚本里,在仓库创建成功后插入邮件发送步骤,是最直接的方式。
示例脚本(基于GitHub CLI gh)
#!/bin/bash # 接收仓库名称和描述参数 REPO_NAME="$1" DESCRIPTION="$2" NOTIFY_EMAIL="your-alert@example.com" GITHUB_USER="你的GitHub用户名" # 创建GitHub仓库(public或private根据需求调整) gh repo create "$REPO_NAME" --description "$DESCRIPTION" --public # 检查仓库创建是否成功 if [ $? -eq 0 ]; then # 构建邮件内容 SUBJECT="新GitHub仓库已创建: $REPO_NAME" BODY="仓库名称: $REPO_NAME 描述: $DESCRIPTION 仓库地址: https://github.com/$GITHUB_USER/$REPO_NAME" # 用sendmail发送邮件(需系统已配置邮件服务) echo -e "Subject: $SUBJECT\n\n$BODY" | sendmail "$NOTIFY_EMAIL" # 若使用mutt替代sendmail: # echo -e "$BODY" | mutt -s "$SUBJECT" "$NOTIFY_EMAIL" else echo "仓库创建失败,未发送通知邮件" fi
关键说明
- 依赖工具:确保系统已安装
gh(GitHub CLI)并完成认证(gh auth login);邮件发送需依赖sendmail/mutt,且系统邮件服务(如postfix)配置正常。 - API调用替代方案:若不用
gh,可直接调用GitHub API创建仓库(需提前生成个人访问令牌PAT):
curl -u "$GITHUB_USER:你的PAT" https://api.github.com/user/repos \ -d '{"name":"'$REPO_NAME'","description":"'$DESCRIPTION'","private":false}'
方案二:用GitHub Webhook实现全局通知(适用于所有创建方式)
如果需要监控所有新仓库创建事件(不止你的脚本),可以通过GitHub Webhook触发邮件通知,需要一个能接收Webhook请求的服务。
步骤1:配置GitHub Webhook
- 进入GitHub账号/组织的Settings → Webhooks → Add webhook
- 设置Payload URL为你的服务地址(如
http://你的服务器地址/cgi-bin/notify.sh) - 选择Content type为
application/json - 选择触发事件为Repository → Created
步骤2:编写Webhook接收脚本(Shell CGI示例)
#!/bin/bash echo "Content-Type: text/plain" echo "" # 读取GitHub发送的JSON数据 read -r POST_DATA # 用jq解析仓库信息(需提前安装jq) REPO_NAME=$(echo "$POST_DATA" | jq -r '.repository.name') REPO_URL=$(echo "$POST_DATA" | jq -r '.repository.html_url') REPO_DESC=$(echo "$POST_DATA" | jq -r '.repository.description') NOTIFY_EMAIL="your-alert@example.com" # 发送邮件 SUBJECT="新GitHub仓库已创建: $REPO_NAME" BODY="仓库名称: $REPO_NAME 描述: $REPO_DESC 仓库地址: $REPO_URL" echo -e "Subject: $SUBJECT\n\n$BODY" | sendmail "$NOTIFY_EMAIL" echo "Notification sent"
关键说明
- 需在服务器上配置CGI服务(如Apache/Nginx开启CGI支持),并确保脚本有执行权限。
- 建议配置Webhook的Secret进行签名验证,避免恶意请求。
邮件服务配置补充
若系统默认邮件服务无法正常发送,可使用第三方SMTP服务(如Gmail、企业邮箱),推荐用msmtp工具:
- 安装
msmtp并配置~/.msmtprc:
account default host smtp.example.com port 587 from your-sender@example.com auth on user your-sender@example.com password 你的邮箱密码/应用密码 tls on tls_starttls on
- 发送邮件的命令替换为:
echo -e "Subject: $SUBJECT\n\n$BODY" | msmtp "$NOTIFY_EMAIL"
内容的提问来源于stack exchange,提问作者Marshal Sriraj
相关产品推荐
相关产品推荐

