- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个应用程序可以扫描电子邮件帐户以查找退回的邮件。它使用 POP3,并在多个客户的系统上成功运行。但是,对于一个客户端,当我们尝试连接时,我们会收到 SocketException - 不知道这样的主机。
我的第一个想法是地址或端口无法访问,但他们回来说这是一个 SSL 端口,我认为我的代码可能无法处理 SSL。但是,当我调用 tcpClient = new TcpClient(Host, Port);
时发生了错误,所以我又回到了之前的假设。 TcpClient 是否需要通过特殊方式连接到 SSL 端口?
我的第二个问题是,是否有一种简单的方法可以将代码转换为使用 SSL,而无需基本上创建常规 POP3 连接类和 SSL POP3 连接类?我相信我需要使用 SslStream
而不是 StreamReader
,这意味着我必须修改任何访问 POP3 服务器的代码,因为 SslStream
确实没有 ReadLine()
方法。
我在下面添加了我的初始连接代码(或重要的部分)。
try
{
tcpClient = new TcpClient(Host, Port);
}
catch (SocketException e)
{
logger.Log(...);
throw (e);
}
String response = "";
try
{
streamReader = new StreamReader(tcpClient.GetStream());
// Log in to the account
response = streamReader.ReadLine();
if (response.StartsWith("+OK"))
{
response = SendReceive("USER ", UserName.Trim() + "@" + Domain.Trim());
if (response.StartsWith("+OK"))
{
response = SendReceive("PASS ", Password);
}
}
if (response.StartsWith("+OK"))
result = true;
}
catch (Exception e)
{
result = false;
}
SendReceive
方法非常简单:
private String SendReceive(String command, String parameter)
{
String result = null;
try
{
String myCommand = command.ToUpper().Trim() + " " + parameter.Trim() + Environment.NewLine;
byte[] data = System.Text.Encoding.ASCII.GetBytes(myCommand.ToCharArray());
tcpClient.GetStream().Write(data, 0, data.Length);
result = streamReader.ReadLine();
}
catch { } // Not logged in...
return result;
}
这似乎主要是 ReadLine()
方法不起作用,但阅读它表明很难用流读取一行,因为您不知道它是否是否发送完毕。是这种情况,还是我只需要编写一个快速方法来读取直到我点击 \r
或 \n
?
最佳答案
要回答您的第一个问题,连接到 SSL 端口的方式没有不同,其工作方式完全相同。
至于你的第二个问题,StreamReader
包装了 System.IO.Stream
而 SslStream
只是 的一个实现>System.IO.Stream
,因此您可以围绕它创建一个 StreamReader
。
你需要做的是这样的:
var stream = tcpClient.GetStream ();
if (useSsl) {
var ssl = new SslStream (stream);
ssl.AuthenticateAsClient (Host, null, SslProtocols.Tls12, true);
stream = ssl;
}
streamReader = new StreamReader (stream);
当然,您需要修复您的 SendReceive()
方法,使其不再使用 tcpClient.GetStream()
,因为您需要使用 SslStream
而不是 tcpClient.GetStream()
将返回的 NetworkStream
。
最简单的方法可能是将 stream
变量传递给 SendReceive()
,或者,我想,添加一个 Stream
加入您的类(class),就像您可能为 streamReader
和 tcpClient
所做的那样。
当然,更好的解决方案是为此使用一个库,例如我的 MailKit以比这段代码更健壮的方式为您处理所有这些的库 :)
关于c# - 使用 POP3 连接到 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340961/
所以下面的内容让我很困惑。 #!/usr/bin/python test = [0, 0, 0, 1, 2, 3, 4, 5, 6] test1 = [0, 0, 0, 1, 2, 3, 4, 5,
这个问题是这个问题的后续问题: deque.popleft() and list.pop(0). Is there performance difference? 在 Python 中,我可以使用 .
我正在使用 bootstrap v2.2.2。我尝试了其他一些方法(即: close popover outside popover but inside stay open 和 How to dis
我正在用 Python 创建提交后脚本并使用子进程调用 git 命令。 在我的脚本中,我想在运行某些命令之前存储所有更改,然后将它们 pop 。问题是,如果没有任何东西可以存储,stash pop 会
我有一个嵌入在 UINavigationController 中的 UITableViewController,我正在尝试将 Peek & Pop 实现到 TableView 中。我的“窥视”部分工作
我的 Windows 机器上安装了 Cygwin、msysgit 和 TortoiseGit。我正在为 Cygwin 编写一个脚本,该脚本通过 ssh 将 git 推送到远程机器: git push
我在 Jenkins 中使用groovy,并且我需要这个字符串来获取其中的最后一个单词。假设字符串是 STATUS = "EXECUTE SIT" 。所以我所做的就是分割字符串,这样我就会得到一个数组
本文是不太具体的问题的后续/重新表述 Is it possible to have a hyperlink inside {content:"..."}? . 用户 Naeem Shaikh ,非常感
Navigator.of(context).pop 和 Navigator.pop(context) 有什么区别? 对我来说两者似乎都在做同样的工作,实际的区别是什么。一个被弃用了吗? 最佳答案 Na
这可能吗?我想要一个更简单的命令来 git stash pop stash@{13} 其中 stash@{13} 只是 last 意思是“最后的存储在列表上”或“最古老的藏品”。 我知道我可以为 gi
Closed. This question is not reproducible or was caused by typos。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-to
Visual Studio 2019 中用于 GIT 存储的以下命令有什么区别? 分阶段 pop 和恢复 (--index) 全部 pop 为未暂存状态 使用https://visualstudio.
我想弹出模型的最后一层。所以我使用了 tf.keras.layers.pop(),但它不起作用。 base_model.summary() base_model.layers.pop() base_m
我想使用 navigator.pop 将值从第 2 页传递到第 1 页,并使用 initstate 中的新值刷新或重新加载我的第 1 页或任何其他解决方法? 我能够在第一页中获取这些值,但无法使用 i
pop 函数的文档说: user> (doc pop) ------------------------- clojure.core/pop ([coll]) For a list or queu
我有以下点击处理程序,当点击它时,我从 handsontable 中提取一个数组然后从数组中删除最后一个元素,并将新数组传递给 ajax post。问题是,如果我再次单击该按钮,它将从数组中删除另一个
我在mailmuch中制作了表单并从中获取了代码,我添加到网页并使用href,当用户单击显示弹出窗口时显示表单。没关系 show popup 但是现在我有ajax请求,我希望在ajax返回成功时显示此
我目前正在学习 Python 中的 pop() 函数并有一个问题。 >>> a = [1,2,3,4] >>> a.pop(3) #or a.pop() 4 >>> print(a) [1,2,3]
我目前正在学习 Python 中的 pop() 函数并有一个问题。 >>> a = [1,2,3,4] >>> a.pop(3) #or a.pop() 4 >>> print(a) [1,2,3]
我可以将对象$push编码到Mongo数组上,如下所示: db.foo.update({},{$push:{bar:3}}) 但是我找不到一种语法,可以让我对列表中的最后一项进行$pop编码。 我已经
我是一名优秀的程序员,十分优秀!