我试图使用客户端的前置SMTP服务器发送电子邮件使用应用程序引擎标准。为此,我们在默认网络和具有静态ip地址的Cloud中创建了Serverless VPC访问连接器,以发送出口流量。客户端已白化静态ip地址和端口。以下是应用程序引擎中的代码片段
msg.set_content('This is a HTML email')
msg.add_alternative(cleared_html_content, subtype='html')
try:
context = ssl._create_unverified_context()
print("starting conectn")
with smtplib.SMTP('xx.xxxx.edu', 2525) as server:
server.starttls(context=context)
server.send_message(msg)
print("sent almost")
except Exception as e:
print('Error: ', e)以下是app.yaml
runtime: python37
entrypoint: gunicorn -t 120 -b :$PORT main:app
vpc_access_connector:
name: projects/xxxxxxxxx/locations/us-central1/connectors/yyyyyyyyy当我使用app engine url运行我的应用程序时,我在日志查看器中得到以下错误
Error: (554, b"xxx.xxxxx.edu\nYour access to this mail system has been rejected due to the sending MTA's poor reputation. If you believe that this failure is in error, please contact the intended recipient via alternate means."此外,我还创建了云功能,代码与应用程序引擎中的代码相同,用于测试,令人惊讶的是,电子邮件被发送到预期的接收方,没有任何问题。当我检查云NAT日志时,它包含了通过云功能触发的所有细节(简而言之,它使用的是静态ip地址),但是没有与应用程序引擎触发器相关的日志。因此,我认为我的应用程序引擎流量不是通过静态ip地址进行的,也不知道如何在app.yaml中提到这一点。
电子邮件功能中也可能存在代码问题,但由于它在云功能中工作,我真的怀疑我的app.yaml,而不是电子邮件python代码。任何帮助都是非常感谢的
发布于 2020-12-25 10:38:30
我知道你的SMTP IP是公开的。对于无服务器的VPC连接器,有一个需要知道的警告。
使用云函数和云运行,如果只有私有IP、公共IP和私有IP通过无服务器的VPC连接器路由,则可以选择
使用app引擎,我没有找到关于出口控制的清晰描述,但我猜想只有私有IP (RFC1918)是通过VPC路由的,而不是公共的。因此,您的云Nat没有被使用,因此您也没有在学校的SMTP服务器上获得授权。
编辑1:
您有三个解决方案来解决这个问题。
gcloud beta run deploy --source=. --region=<REGION> --platform=managed <Service Name>)。就像这样,您可以使用进行部署。使用与App相同的容器引擎生成器(Buildpack)。您必须修改app.yaml文件的内容(如果需要帮助,可以共享它)。但是,到目前为止,IAP还没有兼容云运行。如果你想用它,等等!https://stackoverflow.com/questions/65435334
复制相似问题