Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 使用Delphi通过web服务发送电子邮件(无需泄漏凭据和用户交互)_Web Services_Delphi_Email - Fatal编程技术网

Web services 使用Delphi通过web服务发送电子邮件(无需泄漏凭据和用户交互)

Web services 使用Delphi通过web服务发送电子邮件(无需泄漏凭据和用户交互),web-services,delphi,email,Web Services,Delphi,Email,我有一个Delphi应用程序,需要通过电子邮件将生成的PDF文件发送给预定义的收件人列表中的一个收件人 我不想乱搞MAPI(并非所有客户都配置了此功能) 我不希望我的客户输入他们的邮件帐户详细信息(这意味着SMTP也没有选项) 因此,我考虑使用/设置PaaS Web服务来接收电子邮件文本、PDF文件和接收者的索引号来实际工作。 我的问题是:在Delphi中是否存在现成的解决方案来实现这一点,或者哪种方法更可取 例如,我考虑过使用,但似乎没有。我更喜欢开箱即用的解决方案或经过测试的解决方案,并

我有一个Delphi应用程序,需要通过电子邮件将生成的PDF文件发送给预定义的收件人列表中的一个收件人

  • 我不想乱搞MAPI(并非所有客户都配置了此功能)
  • 我不希望我的客户输入他们的邮件帐户详细信息(这意味着SMTP也没有选项)
因此,我考虑使用/设置PaaS Web服务来接收电子邮件文本、PDF文件和接收者的索引号来实际工作。 我的问题是:在Delphi中是否存在现成的解决方案来实现这一点,或者哪种方法更可取

例如,我考虑过使用,但似乎没有。我更喜欢开箱即用的解决方案或经过测试的解决方案,并提供适当的文档。服务器部分应该尽可能简单

编辑:一些澄清:

  • 生成的exe安装在客户计算机上。因此,我认为设置一个额外的邮件帐户是没有选择的,因为有人可能会从exe中提取凭据并滥用邮件帐户。对于只提供一次(登录/密码)访问的web服务,情况似乎也是如此
  • 使用OAuth2似乎也没有选择,因为我确实希望在没有用户交互的情况下发送电子邮件
  • 如果凭证需要保存在可执行文件中,并且现有的答案建议这样做,那么它们至少应该只提供非常有限的权限

这是可以解决的吗?

要发送邮件,您可以使用类似或的Web服务
它们为您提供了一个http(s)-api,您可以使用该api发送电子邮件。

您可以使用Google App Engine进行Python、PHP、Go或Java编程:

  • 定义您的GAE应用程序侦听POST请求的HTTPS地址
  • 使用TIdHTTP发布PDF和电子邮件文本
  • 在GAE HTTPS服务器中接收PDF邮件文本并将其转发给收件人
用于处理POST请求的Google应用程序引擎

class Guestbook(webapp2.RequestHandler):
    def post(self):
        self.response.write('<html><body>You wrote:<pre>')
        self.response.write(cgi.escape(self.request.get('content')))
        self.response.write('</pre></body></html>')
class留言簿(webapp2.RequestHandler):
def post(自我):
self.response.write('youwrite:')
self.response.write(cgi.escape(self.request.get('content'))
self.response.write(“”)

关于OAuth:GAE支持OAuth,但不是必需的

这是可以解决的吗?

没有

如果您要求用户(通过填写登录表单,如OAuth 2.0)或程序(通过提供硬编码凭据)都不使用web服务进行身份验证,则与web服务的通信将不安全


我建议重新考虑安全要求,并在您的问题中更加明确。

您的链接不支持您声称的Google App Engine不支持Delphi。它只说一个人无法从Delphi应用程序中使用OAuth,其他人没有任何建议。GAE确实不运行Delphi程序,但你很难找到任何应用程序托管服务。您对托管服务或现成应用程序的请求在堆栈溢出时脱离主题。如果你想自己解决这个问题,你的问题太宽泛了;你对自己做这件事的哪一部分有困难?@RobKennedy我没有试着要求服务或现成的应用程序。我试图寻求一种方法来实现从Delphi应用程序发送电子邮件而不泄漏凭据,最好使用Delphi组件。也许我的问题还不够清楚?@RobKennedy关于访问GAE的Delphi组件:我找不到任何信息表明这是在较新的Delphi版本中内置的-你知道其他情况吗?我的链接不是proove,当然,只是一个指示。你的应用程序如何知道最近的
索引号,它是一个静态列表,所以所有电子邮件收件人索引值都硬编码在可执行文件中?@mjn在这种特殊情况下,是的:它是一个在可执行文件中硬编码的静态列表。我想我需要OAuth,如果我不想硬编码可执行文件中的凭据?@ALOISHIMER在这种情况下,您需要OAuth 2.0:-因此您需要一个用于Delphi的OAuth 2.0库(也许您应该更新您的问题并包括最低安全要求)我研究了AOuth2.0:但我认为这需要用户交互来提供用户帐户的详细信息。这也不是我想要的。我想在没有用户交互的情况下发送电子邮件,也不可能滥用我的邮件帐户。我相应地更新了问题。@ALOISHIMER如果没有用户交互和提供硬编码凭据(在程序或配置文件中),几乎不可能进行身份验证。Mailgun API和AWS Query API需要在应用程序中包含秘密访问密钥,可能被恶意用户提取。我需要防止滥用电子邮件帐户。这意味着发送电子邮件的凭据(可能是二进制硬编码的)必须与管理帐户的凭据不同。加上对固定收件人列表的限制,这将提供所需的安全性:理论上,攻击者可以使用硬编码帐户向预定义的收件人发送电子邮件,但无法将其劫持为垃圾邮件。@Aloishemer攻击者可以使用硬编码凭据来
邮件炸弹
带有(可能有害的)PDF附件的预定义收件人。这是真的。我可以通过要求一个与PDF的CRC匹配的代码来使这变得更加困难。但这需要在exe中实现,因此也可以通过反向工程来避免……没有完美的解决方案——多么令人沮丧:)。