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

Python 谷歌云功能-电子邮件脚本-CORS错误,python,http,post,google-cloud-functions,Python,Http,Post,Google Cloud Functions,我正在做一个函数,通过POST请求接收数据并发送一封包含该数据的电子邮件。 当我尝试从其他域调用函数时,出现以下错误: 从源“chrome”访问“我的函数”处的XMLHttpRequest-search://local-ntp'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头 我按照云文档上的说明操作,并在代码顶部添加了以下内容: headers = { 'Access-Control-Allow-Origin': '*',

我正在做一个函数,通过POST请求接收数据并发送一封包含该数据的电子邮件。 当我尝试从其他域调用函数时,出现以下错误:

从源“chrome”访问“我的函数”处的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是一条停止执行当前函数调用并返回相关值的指令

因此,如果希望代码执行并返回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)

return
在其他代码执行之后,而不是之前。我也尝试过,它会给我相同的错误。我唯一能让错误消失的方法是使用这样的代码。如果没有我编辑的问题,这个问题将很难帮助你,因此代码更详细