【问题标题】:how do i send attachments using lua sockets / smtp?如何使用 lua 套接字/smtp 发送附件?
【发布时间】:2013-03-08 08:35:24
【问题描述】:

我有以下代码:

local email_credentials = function(email_address, password, username)
   local from 
   local contents = read_email_contents_file()
   contents= string.gsub(contents, "<<password>>", password)
   from = "<CAdmin@test.net>"
   rcpt = {
   "<"..email_address..">"
   }
   mesgt = {
      headers = {
         to = email_address,
         ["content-type"] = 'text/html',
         subject = "Your Password"
     },
       body = contents
  }

  r, e = smtp.send{
     from = from,
     rcpt = rcpt,
     server = 'localhost', 
     source = smtp.message(mesgt)
  }
end

找到这篇文章:

http://lua-users.org/lists/lua-l/2005-08/msg00021.html

我尝试将标题部分更改为:

  headers = {
     to = email_address,
     ["content-type"] = 'text/html',
     ["content-disposition"] = 'attachment; filename="/var/log/test.log"',
     subject = "test email with attachment"
 },

但这没有用。发送/接收但没有附件的电子邮件。

任何帮助将不胜感激。

谢谢

编辑 1

我添加了以下两行:

 ["content-description"] ='test description',
 ["content-transfer-encoding"] = "BASE64"

现在我得到一个附件。然而,所有的数据都是混乱的。看起来像这样:

=«,ŠÝrm/'LŒq©ÚuÜ!jׯz»^ÆÜÁ©í¶‹aŠÇ¦j)

文件的内容只是文本.... 谢谢

【问题讨论】:

  • 你真的用 base64 编码过“内容”吗?

标签: sockets email lua smtp


【解决方案1】:

我找到了答案。需要包含库 ltn12。

http://w3.impa.br/~diego/software/luasocket/old/luasocket-2.0-beta2/ltn12.html

我更新了我的代码,使其如下所示:

local email_withattachment = function(email_address, path, filename)
   local from 
   if (email_address == nil) or (path == nil) or (filename == nil) then
    return false
   end

   from = "<admin@test.net>"
   rcpt = {
   "<"..email_address..">"
   }
   mesgt = {
      headers = {
         to = email_address,
         ["content-type"] = 'text/html',
         ["content-disposition"] = 'attachment; filename="'..filename..'"',
         ["content-description"] ='yourattachment',
         ["content-transfer-encoding"] = "BASE64",
         subject = "subject line"
     },
      body = ltn12.source.chain(
        ltn12.source.file(io.open(path..filename, "rb")),
        ltn12.filter.chain(
          mime.encode("base64"),
          mime.wrap()
          )
        )
  }

  r, e = smtp.send{
     from = from,
     rcpt = rcpt,
     server = 'localhost', 
     source = smtp.message(mesgt)
  }
  if e then
    return false
  end
  return true
end

我仍在尝试通读 LTN12 手册以了解我到底在做什么(大声笑),但代码有效。

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2010-12-30
    • 2016-06-12
    • 2019-05-29
    • 2017-03-15
    • 1970-01-01
    • 2012-05-24
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多