我正在试验我的Arduino Mega。我还有一个Arduino Ethernet Shield。
我需要在没有计算机(或任何其他设备;如智能手机等)的帮助下使用它们发送电子邮件。虽然我可以找到几篇文章,但我找不到任何可接受的解决方案......
我该怎么做?由于我不要求将其用于任何特殊应用程序,因此您可以对缺失的细节做出任何假设。
我正在试验我的Arduino Mega。我还有一个Arduino Ethernet Shield。
我需要在没有计算机(或任何其他设备;如智能手机等)的帮助下使用它们发送电子邮件。虽然我可以找到几篇文章,但我找不到任何可接受的解决方案......
我该怎么做?由于我不要求将其用于任何特殊应用程序,因此您可以对缺失的细节做出任何假设。
从上面评论中的讨论看来,您要么需要刚刚为您完成代码的人提供的代码,要么需要花时间了解组件并查找或制作组件。
如果它只对非标准数据包有用,他们就不会为这个平台制作以太网屏蔽。因此,某个地方的某个人创建了某种级别的 IP 堆栈。
但是,为了发送邮件,您需要学习简单邮件传输协议(SMTP)。几乎所有 Internet 协议定义都是使用称为RFC(征求意见)的东西定义的。因此,如果您搜索 SMTP RFC,您会找到RFC 2821。
IETF是 Internet 工程任务组。许多网站上都会有这些文件的许多副本。并且由于 Internet 的时代和这些协议,在许多情况下,您会发现创建了一个 RFC 来替换之前的一个。不使用版本号,但它有点像 HTML 1.0 然后 HTML 2.0 等等。即使 RFC 说它完全取代了 RFC xyz,我还是建议您去查找 RFC xyz 并阅读它。我尽可能地回去学习那个,然后继续前进。
许多/大多数基于TCP的协议(TCP 是 RFC 中定义的另一种协议,稍后会详细介绍)是基于 ASCII 的,因此非常容易,例如 Telnet 学习/实验该协议,您可以可能使用 Telnet 来学习 SMTP。
大多数协议都是某种半双工的东西,建立连接并且服务器通常会向您发送一个字符串,您会看到该字符串,然后您发送某种 hello 字符串,服务器会以某种 OKAY 或失败状态响应。对于 SMTP,然后您执行某种“我正在从该电子邮件地址发送邮件”,服务器说 OKAY,您说我要发送此人或此人员列表,对于每个电子邮件地址,您都可以或失败。最终,您告诉服务器您已准备好发送消息正文,您这样做,以定义的终止方式结束消息。然后要么服务器说没问题,要么失败,或者可能有更多的握手。
一般的协议虽然有这个来回。通常您发送带有命令的字符串,并且服务器端通常会发回一个简短的 OK 或错误。有时,如果他们愿意,他们会发回有关错误的更多详细信息,但总是以表示正常或错误的几个字节开头。协议通常有一个流程,您必须先执行此操作,然后执行此操作。
您应该学习套接字编程,有时称为伯克利套接字。如果您选择的平台是 Windows 套接字,您可以编写大部分可跨 Unix 移植的程序,但也可以使用 Windows 套接字跨 Windows 移植。您需要先学习该协议,最好在您的台式机/笔记本电脑上而不是嵌入式上,您可以在那里更快地完成它。您不必学习 fork 或 thread 来使用套接字。这些示例可能表明,这样很容易显示,但是您可以仅使用轮询来编写完整的应用程序,它是半双工的,发送一些东西,等待,发送一些东西,等待。对于这些简单的学习程序,提前一点时间来学习套接字,从那里开始,就是学习协议了。
现在这是非常容易的部分,困难的部分是 TCP/IP 堆栈。我不建议在没有获得更多经验的情况下尝试这样做。例如,学习首先响应ARP(又一个 RFC 协议,地址解析协议),然后ping(ICMP回显,ICMP 协议的一个子集),然后是IP基础知识(嗅探数据包),然后接收并生成UDP数据包。TCP 在此之上是另一个层次,更多的握手。它不是固定的数据包大小,它是流式传输的,不要让您的代码对数据包进行操作,它是字节流,就像使用串行端口一样。
做你自己的 TCP 堆栈是一件非常重要的事情,我不推荐它,你需要找一个为这个平台为以太网屏蔽做过 TCP/IP 堆栈的人,然后使用它,无论RTOS或环境如何他们使用,使用它。然后使用该协议获取基于台式机/笔记本电脑的体验并应用它。
从上面的讨论中,如果您不想学习协议等,我认为您需要在谷歌周围查看 Arduino 以太网屏蔽示例,看看是否有人做过发送电子邮件的事情。