使用 curl 发送电子邮件
- 2024-10-14 08:40:00
- admin 原创
- 73
问题描述:
如何使用 curl 命令行程序从 gmail 帐户发送电子邮件?
我尝试了以下方法:
curl -n --ssl-reqd --mail-from "<sender@gmail.com>" --mail-rcpt "<receiver@server.tld>" --url smtps://smtp.gmail.com:465 -T file.txt
但是,由于 file.txt 是电子邮件的内容,因此当我运行此命令时出现以下错误:
curl: (67) Access denied: 530
是否可以使用 curl 从个人服务器托管的帐户发送电子邮件?这是否会使身份验证过程更容易?
解决方案 1:
curl --ssl-reqd \n --url 'smtps://smtp.gmail.com:465' \n --user 'username@gmail.com:password' \n --mail-from 'username@gmail.com' \n --mail-rcpt 'john@example.com' \n --upload-file mail.txt
mail.txt文件内容:
From: "User Name" <username@gmail.com>
To: "John Smith" <john@example.com>
Subject: This is a test
Hi John,
I’m sending this mail with curl thru my gmail account.
Bye!
附加信息:
我正在使用
curl
支持 SSL 的版本 7.21.6。您不需要使用阻止执行 SSL 连接验证的
--insecure
开关。请参阅此在线资源以了解更多详细信息。curl
通过命令行参数传递帐户凭据被认为是一种不安全的做法。使用
--netrc-file
。请参阅文档。您必须开启对安全性较低的应用程序或较新的应用程序密码的访问权限。
解决方案 2:
如果想要以抄送或密件抄送的方式发送邮件:
curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \n --mail-from 'username@gmail.com' --mail-rcpt 'john@example.com' \n --mail-rcpt 'mary@gmail.com' --mail-rcpt 'eli@example.com' \n --upload-file mail.txt --user 'username@gmail.com:password' --insecure
From: "User Name" <username@gmail.com>
To: "John Smith" <john@example.com>
Cc: "Mary Smith" <mary@example.com>
Subject: This is a test
a BCC recipient eli is not specified in the data, just in the RCPT list.
解决方案 3:
email.conf
像这样创建一个简单的文件
Username: hi@example.com
Password: OKbNGRcjiV
POP/IMAP Server: mail.example.com
然后简单地运行sendmail.sh
,就像在使其可执行之后一样(sudo chmod +x sendmail.sh
)
./sendmail.sh
代码
#!/bin/bash
ARGS=$(xargs echo $(perl -anle 's/^[^:]+//g && s/:s+//g && print' email.conf) < /dev/null)
set -- $ARGS "$@";
declare -A email;
email['user']=$1
email['pass']=$2
email['smtp']=$3
email['port']='587';
email['rcpt']='your-email-address@gmail.com';
email_content='From: "The title" <'"${email['user']}"'>
To: "Gmail" <'"${email['rcpt']}"'>
Subject: from '"${email['user']}"' to Gmail
Date: '"$(date)"'
Hi Gmail,
'"${email['user']}"' is sending email to you and it should work.
Regards
';
echo "$email_content" | curl -s \n --url "smtp://${email['smtp']}:${email['port']}" \n --user "${email['user']}:${email['pass']}" \n --mail-from "${email['user']}" \n --mail-rcpt "${email['rcpt']}" \n --upload-file - # email.txt
if [[ $? == 0 ]]; then
echo;
echo 'okay';
else
echo "curl error code $?";
man curl | grep "^ +$? +"
fi
更多的
解决方案 4:
请注意,mail.txt 的形式似乎很重要/win 为 CRLF,Linux 为 LF,特殊字符等。
最后,经过 2 个小时的努力,它终于为我解决了 GMX 问题(他们说他们的 SMPT 端口是 587 - 并且在下面用小字母提示:“465 也可以用于 SSL”):
Linux 下(Raspberry 3B+ 上的 TinyCore Linux,安装了 curl.tcz):
curl --ssl-reqd --url 'smtps://mail.gmx.net:465' --user 'mymail@gmx.at:mymailPassword' --mail-from 'mymail@gmx.at' --mail-rcpt 'mymail@gmx.at' --upload-file mail.txt
在 Windows 下:
curl --ssl-reqd --url "smtps://mail.gmx.net:465" --user "mymail@gmx.at:mymailPassword" --mail-from "mymail@gmx.at" --mail-rcpt "mymail@gmx.at" --upload-file mail_win.txt
使用 mail.txt:
From: "User Name" <mymail@gmx.at>
To: "John Smith" <mymail@gmx.at>
Subject: This is a test
Hi John,
Im sending this mail with curl thru my gmx account.
Bye!
解决方案 5:
system()
请注意,如果使用Perl 的“ ”函数来执行curl
命令,则每个参数“单词”都是参数数组中的单独项,并且单词不能用引号引起来。
另请注意,如果在 2022 年 5 月 30 日之后通过 Gmail 发送,则必须为 Gmail 帐户设置双重身份验证,然后必须创建“应用密码”。应用密码是一个长字符串,充当备用密码,并替换“ --user
”参数上的常用密码。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件