使用长字符串时出现键错误

问题描述

我用电子编写了一个应用程序,它可以发送 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,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[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')

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)