谷歌云功能-电子邮件脚本-CORS错误



我正在制作一个函数,该函数通过POST请求接收数据并发送带有该数据的电子邮件。当我试图从不同的域调用我的函数时,我会得到以下错误:

从origin chrome访问"my function"处的XMLHttpRequest-search://local-ntp'已被CORS策略阻止:请求的资源上不存在"Access Control Allow Origin"标头。

我按照云文档上的说明,在代码顶部添加了以下内容:

headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': 'Authorization',
'Access-Control-Max-Age': '3600',
'Access-Control-Allow-Credentials': 'true'
}
return ('', 204, headers)

错误已经解决,但我的其余代码不会在return语句之后运行。如何插入标题,然后继续运行脚本?

整个代码看起来是这样的:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from google.cloud import storage
import requests
def teste_email(request):
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': 'Authorization',
'Access-Control-Max-Age': '3600',
'Access-Control-Allow-Credentials': 'true'
}
return ('', 204, headers)

# Pega as variáveis passadas no request
request_json = request.get_json()
nome_projeto = request_json['nome_projeto']
logo_ic = request_json['logo_ic']
logo_aplicacao = request_json['logo_aplicacao']
title = request_json['title']
link = request_json['link']
descricao = request_json['descricao']
base = request_json['base']
# Lê o arquivo do template armazenado no cloud storage e o atribui a uma variável
client = storage.Client()
bucket = client.get_bucket('templates_email_icherry')
blob = bucket.get_blob("template-1.txt")
downloaded_blob = blob.download_as_string()
template = downloaded_blob.decode("utf-8")
# Substitui as variáveis no template pelos valores passados na chamada
template = template.replace("{title}", title)
template = template.replace("{logo_ic}", logo_ic)
template = template.replace("{logo_aplicacao}", logo_aplicacao)
template = template.replace("{descricao}", descricao)
template = template.replace("{link}", link)
template = template.replace("{nome_projeto}", nome_projeto)
template = template.replace("{base}", base)
# Variáveis para o envio do e-mail
email = 'email'
password = 'password'
send_to_email = 'email'
subject = 'Assunto do email'
messagePlain = 'Message Plain'
msg = MIMEMultipart('alternative')
msg['From'] = email
msg['To'] = send_to_email
msg['Subject'] = subject
msg.attach(MIMEText (messagePlain, 'plain'))
msg.attach(MIMEText (template, 'html'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email, password)
text = msg.as_string()
server.sendmail(email, send_to_email, text)
server.quit()

在代码中,您必须将return语句放在调用的末尾。这是因为return是一条停止执行当前函数调用并返回相关值的指令。

因此,如果您希望代码执行并返回CORS头,那么它必须是函数的最后一次调用。这是生成的代码:

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from google.cloud import storage
import requests
def teste_email(request):
# Pega as variáveis passadas no request
request_json = request.get_json()
nome_projeto = request_json['nome_projeto']
logo_ic = request_json['logo_ic']
logo_aplicacao = request_json['logo_aplicacao']
title = request_json['title']
link = request_json['link']
descricao = request_json['descricao']
base = request_json['base']
# Lê o arquivo do template armazenado no cloud storage e o atribui a uma variável
client = storage.Client()
bucket = client.get_bucket('templates_email_icherry')
blob = bucket.get_blob("template-1.txt")
downloaded_blob = blob.download_as_string()
template = downloaded_blob.decode("utf-8")
# Substitui as variáveis no template pelos valores passados na chamada
template = template.replace("{title}", title)
template = template.replace("{logo_ic}", logo_ic)
template = template.replace("{logo_aplicacao}", logo_aplicacao)
template = template.replace("{descricao}", descricao)
template = template.replace("{link}", link)
template = template.replace("{nome_projeto}", nome_projeto)
template = template.replace("{base}", base)
# Variáveis para o envio do e-mail
email = 'email'
password = 'password'
send_to_email = 'email'
subject = 'Assunto do email'
messagePlain = 'Message Plain'
msg = MIMEMultipart('alternative')
msg['From'] = email
msg['To'] = send_to_email
msg['Subject'] = subject
msg.attach(MIMEText (messagePlain, 'plain'))
msg.attach(MIMEText (template, 'html'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email, password)
text = msg.as_string()
server.sendmail(email, send_to_email, text)
server.quit()
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': 'Authorization',
'Access-Control-Max-Age': '3600',
'Access-Control-Allow-Credentials': 'true'
}
return ('', 204, headers)

最新更新