标签: mta

与MTA线程相比,STA线程有哪些限制?

如果我们像这样创建一个线程STA:Thread.SetApartmentState(STA);那么它就不能运行标有[MTAThread]属性的代码.

我们已经[STAThread]在Windows和控制台应用程序中看到过,但我从未见过具有[MTAThread]属性的代码,也不知道哪些.NET库使用此属性.

我的问题是,与具有MTA单元状态(自然.NET线程)的线程相比,将单元状态设置为STA的线程的局限性是什么?

c# multithreading mta sta

17
推荐指数
1
解决办法
4209
查看次数

MTA究竟做了什么?

这个问题让我思考,现在我意识到我对MTA的内部结构一无所知.

MTA究竟做了什么?SMTP协议之后的所有内容对我来说都是黑暗魔法.假设我想编写一个简约的MTA(或MDA)来发送电子邮件,我需要学习/做什么?

编辑:我实际上并没有计划编写MTA,我只是想了解它在内部是如何工作的.

email service smtp protocols mta

15
推荐指数
1
解决办法
1万
查看次数

[alternatives --config mta]显示的含义是什么?

运行[alternatives --config mta]时会出现以下屏幕.

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
 + 1           /usr/sbin/sendmail.postfix
*  2           /usr/sbin/sendmail.sendmail

Enter to keep the current selection[+], or type selection number: 
Run Code Online (Sandbox Code Playgroud)

星号是什么意思?

请帮我.

linux mta

13
推荐指数
1
解决办法
3191
查看次数

如何设置我的Ubuntu VPS发送外发邮件?

我的VPS提供程序(Slicehost)不提供SMTP服务器.我使用Google Apps为我的域发送和接收邮件,但我希望能够以编程方式发送电子邮件.

我一直在谷歌搜索这个问题好几个月,我似乎无法清楚地了解我需要做什么.我只需要像postfix这样的MTA吗?我将其配置为"卫星"或"互联网"网站吗?我是否需要进行任何DNS更改?如果我想有一天以编程方式接收电子邮件,是否有任何配置选项我应该小心修补?另外,如果我的VPS主机确实提供了一个SMTP服务器,我现在要做的不是我需要做什么?

谢谢!

编辑:我的发现的简要概述:

  • 更新/etc/hosts/etc/hostname反映FQDN(例如,mail.domain.comsub.domain.com代替slicename)
    • 重启并验证 hostname -f
  • 设置反向DNS(由拥有IP池的任何人拥有)以指向相同的FQDN
    • 检查RDNS是否已经传播了 dig -x server.ip.address
  • sudo aptitude install postfix telnet mailx
    • 使用网站设置
    • 将FQDN设置为上面选择的任何内容
  • 测试用 mail whateveryouremailis@gmail.com

email ubuntu postfix-mta smtp mta

11
推荐指数
1
解决办法
1万
查看次数

MTA控制台应用程序从多个线程调用STA COM对象

虽然有很多关于COM和STA/MTA的问题(例如这里),但大多数人都在讨论具有UI的应用程序.但是,我有以下设置:

  • 控制台应用程序,默认情况下为Multi-Threaded Apartment(Main()显式具有该[MTAThread]属性).
  • 主线程产生一些工作线程.
  • 主线程实例化单线程COM对象.
  • 主线程调用Console.ReadLine(),直到用户点击'q',然后应用程序终止.

几个问题:

  • 许多地方都提到需要为COM对象提供消息泵.我是否需要为主线程手动创建消息泵,或者CLR是否会在新的STA线程上为我创建消息泵,正如这个问题所暗示的那样?
  • 只是为了确保 - 假设CLR自动创建必要的管道,然后我可以使用来自任何工作线程的COM对象而无需显式同步吗?
  • 在性能方面,以下哪项更好:
    • 让CLR负责处理COM对象的编组.
    • 在单独的STA线程上显式实例化对象,并让其他线程通过例如a与之通信ConcurrentQueue.

c# mta com-interop sta

11
推荐指数
3
解决办法
3804
查看次数

COM出站呼叫导致"由于应用程序正在调度输入同步呼叫,因此无法进行拨出呼叫."

我有一个COM服务器(C++/STA(基于MFC的应用程序))和一个COM客户端(C#/ MTA).COM服务器必须位于STA中,因为它是一个MFC应用程序(在这个问题上我别无选择).客户端向服务器发出调用,服务器向客户端发出回调.这就是错误发生的地方(RPC_E_CANTCALLOUT_ININPUTSYNCCALL).我猜测服务器是否是MTA,这个问题永远不会出现,但遗憾的是,MFC的文档明确否认将公寓初始化为MTA.

关于如何解决这个问题的任何想法?

我一直在想让服务器对象(我通过运行对象表公开的对象)住在自己的公寓(MTA)中.这是一个好主意,还是先尝试一些简单的东西?

UPDATE

服务器对象只是指向应用程序中某些功能的精简界面.大多数情况下,它只是读取和写入内存位置,但有些情况下它会向应用程序中的各个窗口生成窗口消息.服务器对象本身不是整个应用程序.

com mta sta visual-c++

10
推荐指数
1
解决办法
1万
查看次数

是否有Python MTA(邮件传输代理)

只是想知道是否有Python MTA.我看了看smtpd,但它们看起来都像没有任何功能的转发器.

python smtp mta smtpd

9
推荐指数
3
解决办法
4713
查看次数

为 async void main 设置 ApartmentState

我有一个 Windows 窗体应用程序。

现在我想使用一种async方法。

从 C# 7.1 开始,我可以使用一种async Main方法:https :
//docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7-1

但是,现在我的STAThread属性被忽略,我的应用程序在 MTA 中运行。这是设计使然还是我可以强制我的应用程序再次在 STA 模式下运行?

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
private static async Task Main(string[] args)
{
    // returns MTA
    Console.WriteLine("{0}", Thread.CurrentThread.ApartmentState);
}
Run Code Online (Sandbox Code Playgroud)

c# mta sta async-await

8
推荐指数
3
解决办法
2269
查看次数

MSTest设置公寓穿线到MTA

我在Visual Studio 2010中使用MSTest来处理需要将公寓线程模型设置为MTA的项目.

我已经在线查看了我发现并尝试过的项目似乎只适用于Visual Studio 2008和2005,请参阅http://blogs.msdn.com/b/ploeh/archive/2007/10/21/runningmstestinanmta. aspx.

谢谢

mstest mta visual-studio-2010

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

电子邮件中 ​​.eml 文件的 MIME 类型是什么

我想将 MTA 报告(未发送的退回邮件)附加到电子邮件中,但正确的 MIME 类型是什么?

我获取 MTA 报告的全文

$body = imap_fetchbody($this->Mailbox->stream, $this->header->uid, '', FT_UID);
Run Code Online (Sandbox Code Playgroud)

但是附加的 .eml 文件的正确 MIME 类型是什么?

已尝试message/rfc822,但当您在 ​​Thunderbird 中打开文件时,弹出窗口为空。也尝试过text/plain,但附件以纯文本形式打开。我想以电子邮件形式打开附件 .eml

当您收到 MTA 报告(未送达)时,退回邮件始终作为附件转发

我想将完整的 MTA 报告 + 转发的退回邮件附加到新邮件中

php email mta mime-types

6
推荐指数
2
解决办法
2万
查看次数

从外部进程中解决C#中的问题

我有这个简单的代码:

public void Run()
{
   var invokerThread = new Thread(new ThreadStart(RunOnBackground));
   invokerThread.Start();
}

private void RunOnBackground()
{
   Trace.WriteLine("hi");
   ...
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当运行此代码(来自第三方进程)时,线程并没有真正运行.在进程资源管理器和VS调试器中,我看到线程已创建且其状态为"正在运行".

主线程的公寓是STA,我在内部线程上尝试了STA和MTA.

当我Run()在最后添加到方法时invokerThread.Join();,线程确实运行.但话说回来并没有真正帮助.

我错过了什么?

编辑:以下是有关代码托管的更多信息 -

Run() 方法是通过COM interop从一个进程调用的,该进程也是托管可执行程序集(使用COM互操作的原因是因为系统中的所有其他组件都是本机的).

该方法RunOnBackground()在跟踪之后包括一些代码,并且通常其执行持续10-20秒,包括启动另一个进程并等待其终止.此外,我在代码中还有一些其他区域,我将一些调试信息写入Trace.在调试代码时,Run()像往常一样运行并且在invokerThread.Start();invokerThread的状态为"Running"之后(尽管RunOnBackground()方法中的断点不会停止).

当我添加invokerThread.Join()在结束Run()方法调试器去RunOnBackground() Join().

.net c# multithreading mta sta

5
推荐指数
1
解决办法
1291
查看次数

防止事件产生另一个线程

我在这里读到关于代表和事件(完全不同的原因)来自这个[网站] [1]在那里我得到的印象是,如果你的事件需要足够长的时间,就会生成一个单独的线程.那让我想到了一个我似乎无法解决的错误.所以我正在为我的MSR设备制作键盘楔程序,通过RS232端口进行通信.我创建了这个类来处理输入.

    public ComPortInput(SerialPort sp, int delay)
        : this(delay)
    {
        if (sp == null)
            throw new System.ArgumentNullException("Serial port can not be null");

        serialPort = sp;
    }
Run Code Online (Sandbox Code Playgroud)

当我打开这个ComPortInput类时,我订阅了DataReceived事件.如果我正确猜测,那么如果我将延迟设置得足够高,那么我的dataevent将创建一个新线程.我认为通过查看我的代码可以最好地描述问题.

Program.cs中

    [STAThread]
    static void Main()
    {
        singleton = new System.Threading.Mutex(true, "Keymon");
        if (!singleton.WaitOne(System.TimeSpan.Zero, true))
        { return; }

        InstantiateProgram();
        System.Windows.Forms.Application.Run(main);
    }
    private static void InstantiateProgram()
    {
        System.Windows.Forms.Application.EnableVisualStyles();
        System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
        main = new frmMain();
    }
Run Code Online (Sandbox Code Playgroud)

ComPortInput.cs.只是datareceived事件

    void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        if (Delay > 0)
            System.Threading.Thread.Sleep(Delay); //waits for all the data to be sent to …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism events mta sta

2
推荐指数
1
解决办法
334
查看次数

在STAThread和MTAThread之间切换以及内存泄漏

在vb.net WebService中查找内存泄漏时,我检测到阻塞的终结器,以及从未发布的几个对象(例如System.Threading.ReaderWriterLock)

Google告诉我这可能是因为STAThread属性是在我的main方法上设置的.我花了很长时间才发现VB.net使用STA作为默认值,而c#使用MTA.

当我将MTAThread-Attribute添加到我的Main方法时,一切正常,对象被释放.因此,如果我理解正确,则在STA模式中阻止Finalizer-Thread.

到目前为止一切顺利,但说实话,我今天第一次听说STA和MTA.可以在没有任何想法的情况下在STA和MTA之间切换吗?

更新 我仍然不确定我是否可以在不破坏我的代码的情况下在MTA和STA之间切换.这是一些更多的想法

  • 我不在我的代码中使用COM对象.
  • 但我正在使用的其他一些库似乎在引擎盖下使用它们,例如OracleCommand
  • 我的应用程序是用vb.net编写的,所以很有可能它被设置为STA-Appartment,因为这是vb.net的默认值,我在开发时不知道
  • 如果我在c#中编写了我的应用程序,默认情况下会将其设置为MTA
  • 那么我需要关心引擎盖下使用的COM对象吗?

c# vb.net mta sta

2
推荐指数
1
解决办法
1727
查看次数