首页 > 解决方案 > 使用长字符串时出现键错误

问题描述

我用电子编写了一个应用程序,它可以发送 HTML 电子邮件(使用 python)。这是我的预载:

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  document.getElementById("submit").addEventListener("click", clicked_button)
  function clicked_button(){
    var htmlcontent = document.getElementById("htmlinput").value
    const {PythonShell} = require("python-shell");
    var path = require("path")
    var frommail = document.getElementById("from").value
    var tomail = document.getElementById("to").value
    var subject = document.getElementById("subject").value
    var server = document.getElementById("server").value
    var port = document.getElementById("port").value
    var password = document.getElementById("password").value
    var options = {
      scriptPath: path.join(__dirname),
      args: [htmlcontent, frommail, tomail, subject, server, port, password]
    }
    var hpm = new PythonShell('main.py', options);
    alert("Successfully sended the mail!")
  }
  function loadAsText(theFile, input) {
    var reader = new FileReader();
    reader.onload = function(loadedEvent) {
      document.getElementById(input).value = loadedEvent.target.result;
    }
    reader.readAsText(theFile);
    return
  }
  document.addEventListener('drop', (e) => {
    e.preventDefault();
    e.stopPropagation();
    for (const f of e.dataTransfer.files) {
      loadAsText(f, "htmlinput");
    }
  });
  document.addEventListener('dragover', (e) => {
    e.preventDefault();
    e.stopPropagation();
  });
})

这是我的python脚本:

import smtplib
from email.message import EmailMessage
from email.utils import make_msgid
import sys

def sendmail(htmlcontent, frommail, tomail, subject, server, port, password):
    msg = EmailMessage()
    asparagus_cid = make_msgid()
    msg.add_alternative(htmlcontent.format(asparagus_cid=asparagus_cid[1:-1]), subtype='html')
    msg['Subject'] = subject
    msg['From'] = frommail
    msg['To'] = tomail
    s = smtplib.SMTP(server, port)
    s.connect(host=server, port=port)
    s.starttls()
    s.login(frommail, password)
    s.send_message(msg)
    s.quit()

sendmail(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7])
sys.stdout.flush()

如果我启动应用程序并发送一个小的 html 文本,它就可以工作。但是如果我发送一个大的 html 文本,我会得到一个“keyerror”:

Uncaught Error: KeyError: 'position'
    at PythonShell.parseError (/Users/kloetzchengrafik/Documents/send-html-mail/node_modules/python-shell/index.js:261:21)
    at terminateIfNeeded (/Users/kloetzchengrafik/Documents/send-html-mail/node_modules/python-shell/index.js:144:32)
    at ChildProcess.<anonymous> (/Users/kloetzchengrafik/Documents/send-html-mail/node_modules/python-shell/index.js:136:13)
    at ChildProcess.emit (events.js:315:20)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
    ----- Python Traceback -----
    File "/Users/kloetzchengrafik/Documents/send-html-mail/main.py", line 21, in <module>
      sendmail(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7])
    File "/Users/kloetzchengrafik/Documents/send-html-mail/main.py", line 10, in sendmail
      msg.add_alternative(htmlcontent.format(asparagus_cid=asparagus_cid[1:-1]), subtype='html')

没有人和我有同样的问题,所以我在这里问。如果我打包它,它什么也不做。

标签: javascriptpythonelectronkeyerror

解决方案


推荐阅读