小编Mic*_*ach的帖子

为什么回复我的SMTP发送的gmail消息没有线程?

我使用以下Python片段通过SMTP发送大量类似的电子邮件:

def send(from_, to, body):
  server = smtplib.SMTP('smtp.gmail.com:587')
  server.ehlo()
  server.starttls()
  server.ehlo()
  server.login('michael@gmail.com', password)
  msg = '''\
From: %s
To: %s
Subject: %s

%s''' % (from_, to.encode('utf-8'), "Hello", body.encode('utf-8'))
  server.sendmail(from_, to, msg)
  server.quit()
Run Code Online (Sandbox Code Playgroud)

这些消息是对话中的第一条消息.Strangley,对这些消息的回复没有被线程化到原始消息的对话上.

回复在我的收件箱中作为单独的邮件返回,主题="Re:Hello",与原始邮件无关.(很偶然一个被适当螺纹的,这甚至怪异.)

我已经验证这些(非线程)回复有一个References:字段,该字段引用已发送邮件的Message-ID字段,该字段由GMail自动生成.

知道我做错了什么吗?

python gmail imap imaplib

8
推荐指数
1
解决办法
1352
查看次数

优雅的方法来防止MVC中的循环事件?

问题,简而言之:

在MVC中,如何区分复选框单击(或选择框或列表框更改)与人类意义"控制器,修改模型"以及从控制器单击(或选择框或列表框更改)意味着"我"更新视图,因为模型已更改"?


这个例子:

我有一个JS应用程序(所有一个大的HTML + JS页面;它背后有一个服务器,并且AJAX正在进行,但对于该示例并不重要),其中"顶点"的概念由"边缘"连接.UI允许您在地图上添加和删除顶点,以及启用或禁用顶点对之间的边.

有两种方法可以禁用从顶点A到顶点B的边:

  1. 单击Edge以使"Edge Details"窗口为您提供"Disable This Edge"按钮; 要么
  2. 单击顶点A(或B)使"顶点详细信息"窗口为您提供附近顶点的清单,您可以从中取消选中顶点B(或A).

以下是它在MVC中的工作原理(但请参阅本文末尾的更新,我在其中理解了我的理解中的问题):

  • 模型:Vertex对象列表和Edge对象列表.
  • 查看:GMaps UI,带有标记和折线,以及复选框和按钮以及"顶点细节"和"边缘细节"DIV.
  • 控制器:
    • JS功能,当复选框和按钮上的事件触发时更新模型; 和
    • JS函数在模型上的事件触发时更新视图.

这是具体的不雅:

  1. 用户的顶点细节窗口侧重于顶点A,边缘细节窗口侧重于从顶点A到顶点B的边缘.
  2. 用户在"边缘详细信息"窗口中单击"禁用此边缘".
  3. 控制器功能1获取click事件,并在Edge模型对象上调用disable().
  4. Edge模型对象触发"我刚被禁用"事件.
  5. 控制器功能2接收"我刚被禁用"事件,并且
    1. 重新绘制边缘详细信息窗口,说"我已禁用!" 和
    2. 在"顶点详细信息"窗口中取消选中"顶点B".
      1. 扯淡!这再次触发Controller函数1,它正在侦听意味着边缘被禁用的UI事件!

因此,不必要的重新更新模型,并重新更新View.在一个更复杂的视图中,事件会触发触发事件的事件,这可能会导致数十个无关的更新!


更新:一个很好的答案.

我误解了MVC.我没有一个View,如上所述:我有几个模型的几个视图.特别是,我有一个特定节点的复选框列表边缘视图,以及一个独立的"详细窗口式"边缘视图.

此外,我不应该在模型更改时更新所有视图的一个控制器功能:每个视图应在模型更改时自行修改.

因此,如果每个View在Model上注册"状态更新"事件,并且每个View在收到这些事件后自行更新,那么我的循环事件问题的答案就是:

复选框列表视图将禁用复选框事件,以便在模型状态更改后更新复选框.

现在,如果用户通过"边缘详细信息"窗口禁用边缘,则控制器会更新边缘模型,复选框列表视图会收到更新通知,复选框列表视图足够智能,可以在更改状态时隐藏复选框事件.适当的复选框

这比我原来的解决方案更加可口,其中一个Controller更新所有视图 - 因此必须知道哪些视图需要特别小心和提供以避免循环.相反,只有具有麻烦的UI元素的单个View必须处理该问题.

感谢那些回答我问题的人!

javascript model-view-controller design-patterns event-handling

7
推荐指数
1
解决办法
1329
查看次数

如何在vim中使Python折叠不会在视觉上破坏空白?

当我在vim中折叠Python代码时,折叠文本总是从第0列开始.这在视觉上很嘈杂,因为Python有很大的空白 - 当我浏览文件时它看起来像顶级代码.

是否有设置告诉foldtext将自己缩进到折叠的第一行代码的级别,而不是重写foldtext()方法?

python vim folding

7
推荐指数
1
解决办法
105
查看次数

如何在一个小弹出窗口中进行Paypal的结账流程?

Humble Frozenbyte Bundle最近结束了.在此之前,如果您尝试通过单击Paypal按钮来支付捆绑包,则会出现一个小弹出窗口,要求您登录PayPal,要求您单击"是这是正确的支付金额",然后弹出窗口再次关闭.优秀!

我想对我的应用程序做同样的事情,但我无法弄清楚使用正确的Paypal流程.标准cmd = _xclick WPS结帐流程占据了整个屏幕,所以我知道这不是Humble Bundle在弹出窗口中放入的内容......

要清楚,我不是在问如何在HTML中创建一个弹出窗口.我问如何访问一个可以放在一个小弹出窗口中的PayPal结账流程,如果我没记错的话,大约400x800.如果Humble Bundle仍然打开,我当然只看源代码!

提前感谢任何提示!

更新:PayPal数字商品正是我所寻找的.

(不是很好的)Paypal集成指南在这里:https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_ExpressCheckout_IntegrationGuide_DG.pdf

我正在关注试图让这个工作的博客文章在这里:https://www.x.com/blogs/matt/2011/02/15/another-digital-goods-demo

我还没有完成它的工作,但它让我很接近.

paypal

6
推荐指数
1
解决办法
6874
查看次数

Elixir 是否有等效的“Kernel.delete_in”?

ElixirKernel.put_in非常适合添加或更新嵌套结构深处的值。但是,它不支持删除该值,而且我在delete_in任何地方都没有看到。

delete_inpop_in、 或类似的东西存在吗?就像是

def delete_in(data, keys) do
    put_in(data, keys, :magic_value_that_deletes_the_final_key)
end
Run Code Online (Sandbox Code Playgroud)

如果没有它,添加和更新函数看起来就像不错的管道,但删除或弹出函数看起来不太整洁。

elixir

3
推荐指数
1
解决办法
749
查看次数