javascript - 使用 gmail javascript api 从特定用户发送电子邮件

标签 javascript gmail-api

我希望从特定的 Gmail 帐户发送一封电子邮件(特别是输入表单的值),由于平台限制,我必须使用客户端(即 javascript)代码来执行此操作。我正在测试以下代码,但它似乎使用我的个人 gmail 凭据,而不是我尝试指定的客户端 ID。我做错了什么?

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Base64/1.0.0/base64.min.js"></script>
<script type="text/javascript">
  var CLIENT_ID = 'myclientid.apps.googleusercontent.com';
  var DISCOVERY_DOCS = ["https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest"];
  var SCOPES = 'https://www.googleapis.com/auth/gmail.readonly https://www.googleapis.com/auth/gmail.send';
  function handleClientLoad() {
    gapi.load('client:auth2', initClient);
  }
  function initClient() {
    gapi.client.init({
      discoveryDocs: DISCOVERY_DOCS,
      clientId: CLIENT_ID,
      scope: SCOPES
    });
  }

  // ucs-2 string to base64 encoded ascii
  function utoa(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
  }
  // base64 encoded ascii to ucs-2 string
  function atou(str) {
    return decodeURIComponent(escape(window.atob(str)));
  }

  function submitForm(form) {
    var formid = form.id.length>0 ? '('+form.id+') ' : '';
    var bodyText='The form '+formid+'was filled out on '+window.location.href+'\r\n'+
                 'The following values were submitted:';
    for (var i=0;i<form.childElementCount;i++) {
        bodyText += '\r\n'+'\r\n'+form[i].name+'\r\n'+form[i].value;
    }
    var unencodedEmail = 'To: '+form.attributes.getNamedItem('data-submit-to').value+
                         '\r\nSubject: A form '+formid+'was filled out on '+window.location.href+
                         '\r\n'+bodyText;
    try {
        var authInstance = gapi.auth2.getAuthInstance();
        authInstance.signIn({ client_id: CLIENT_ID });
        try {
            var base64EncodedEmail = utoa(unencodedEmail);
            var request = gapi.client.gmail.users.messages.send({
                'userId': 'me',
                'resource': {
                  'message': {
                    'raw': base64EncodedEmail
                  }
                }
              });
            request.execute(function() {/*do post email sending stuff*/});
        } finally {
            authInstance.signOut();
        }
    } finally { 
        return false;//prevent the form from redirecting
    }
  }
</script>

<script async defer src="https://apis.google.com/js/api.js"
  onload="this.onload=function(){};handleClientLoad()"
  onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>

最佳答案

您不能使用其他人的凭据,您需要使用自己的凭据。如果您按照Javascript Quickstart for Gmail ,您会发现凭据将来自您的 Google 邮件帐户。这就是我们有一个名为 OAuth 的原因。 。如果 Google 允许这样做,这将很容易被利用和恶意使用。

关于javascript - 使用 gmail javascript api 从特定用户发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033952/

相关文章:

javascript - 在 html 页面上使用 javascript 动态添加剑道下拉列表

javascript - 编码/解码查询字符串 ReturnUrl 参数

javascript - Gmail API发送电子邮件错误401 :Invalid Credentials

java - Gmail API - 邮件正文包含破折号,无法进行 base64 解码

r - 如何使用 R 从 gmail 下载附件?

javascript - 获取 Gmail 线程主题(以一种理智的方式)

javascript - 通过参数组合和分组 javascript 对象的最佳方法

javascript - 单击事件向下滑动div

javascript - All.js 坏了?没有方法 'addMonths'

Python - Gmail API - 'Resource' 的实例没有 'users' 成员