使用 curl 发送电子邮件

如何使用 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?这是否使身份验证过程更容易?

136551 次浏览
curl --ssl-reqd \
--url 'smtps://smtp.gmail.com:465' \
--user 'username@gmail.com:password' \
--mail-from 'username@gmail.com' \
--mail-rcpt 'john@example.com' \
--upload-file 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!

附加信息:

  1. 我使用的是带 SSL 支持的 curl版本7.21.6。

  2. 您不需要使用 --insecure开关,它可以防止 curl执行 SSL 连接验证。详情请参阅 这个在线资源

  3. 通过帐户凭证被认为是一种不好的安全做法 命令行参数。使用 --netrc-file。参见 文件

  4. 对于不太安全的应用程序或较新的 应用程序密码,必须使用 打开通道

如果你想发送复印件或盲目复印件:

curl --url 'smtps://smtp.gmail.com:465' --ssl-reqd \
--mail-from 'username@gmail.com' --mail-rcpt 'john@example.com' \
--mail-rcpt 'mary@gmail.com' --mail-rcpt 'eli@example.com' \
--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.


像这样创建一个简单的 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 \
--url "smtp://${email['smtp']}:${email['port']}" \
--user "${email['user']}:${email['pass']}" \
--mail-from "${email['user']}" \
--mail-rcpt "${email['rcpt']}" \
--upload-file - # email.txt




if [[ $? == 0 ]]; then
echo;
echo 'okay';
else
echo "curl error code $?";
man curl | grep "^ \+$? \+"
fi

更多

注意 mail.txt 的形式似乎很重要/CRLF 对于 win、 LF 对于 Linux、特殊字符等等。

最后,经过两个小时的努力,我的 GMX 终于可以使用了(他们告诉他们的 SMPT 端口是587-再往下用小写字母提示: “也可以使用 SSL 465”) :

在 Linux 下(在 Raspberry 3B + 上安装了 curl.tcz 的 TinyCore Linux) :

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

窗下:

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!

注意,如果使用 Perl 的“ system()”函数执行 curl命令,则每个参数‘ word’都是参数数组中的一个单独项,而单词 不得引用

还要注意的是,如果在2022年5月30日以后通过 Gmail 发送邮件,Gmail 账户必须建立双重身份验证,然后你必须创建一个“ App Password”。App Password 是一个长字符串,用作替代密码,并替换“ --user”参数上的通常密码。