未找到

未发布 .NET图像处理库ImageGear for .NET v23发布,新增AcroForm功能和亚洲OCR丨附下载
by Harriet666 keys 分享 1496731502868
ImageGear for .NET是一款图形图像处理控件,可以轻松地为程序添加扫描/压缩/条形码识别/PDF/文件查看与处理/图形编辑与处理等功能。具有扫描,压缩,浏览、添加注释,打印,图像编辑,OCR以及PDF和矢量图像支持,使开发人员可以快速地开发出图像处理程序,可用于.NET Framework2.0、3.0、3.5、4.0,ASP.NET,WPF,SilverLight,DirectX 10和Direct3D 10。支持超过100种图片格式,包含:TIFF, JPEG, CAD, Vector, 3D PDF, PDF/A, PS等。
 
最新版本的ImageGear.NET v23,为开发人员提供了新的AcroForm功能;将亚洲光学字符识别(OCR)输出添加到PDF,通过将中文、日文和韩文OCR输出结合到PDF中,扩大了适应性和在全球无缝创建PDF的能力;并通过合规性检查加强了PDF/A转换。
 
【ImageGear.NET v23最新版下载>>>】

新增功能


PDF AcroForms——创建、读取和写入PDF表单字段和数据

d353839346c4441381fb5d0d1e386b06ojpg
高级AcroForms SDK提供强大的表单功能
.NET开发中AcroForms SDK *可以将AcroForm字段添加、更新或删除到新的或现有的PDF中。这为你的用户提供从表单域读取和写入数据的方式,而无需离开你的网站或应用程序。如果他们需要更新现有的PDF,SDK会通过注释工具提供帮助。
使用表单增强你的应用程序
需要让你的用户访问数字表单?预先填充表单域允许用户直接从你的网站或应用程序将数据写入表单。将表单字段添加到PDF,包括:
·  复选框
·  文本字段
·  列表框
·  组合框
·  状态设置框
ImageGear还允许低级别访问PDF,以便用户可以直接从你的网站或应用程序访问任何文档或AcroForm。
 

亚洲OCR——包括中文、日文和韩文的语言自动检测和PDF输出
274011dbdffa41fba34c89f02c47a271ojpg

 
ImageGear增加了其先进的光学字符识别功能。ImageGear支持亚洲语言,提供中文、日文和韩文的OCR。
语言支持
亚洲OCR支持横向和纵向文字的亚洲语言。支持的语言有:
·  传统中文
·  简体中文
·  日语
·  韩语
自动语言检测技术
ImageGear使用自动语言检测技术来完成文档的OCR,包括含有亚洲语言的文档。此功能可以帮助你的业务在亚洲市场取得成功。
亚洲OCR输出格式
通过使用所有识别信息(字体细节、定位的图像区域和识别的表格结构信息)来创建格式化的输出,以重述原始文档的含义。亚洲版利用OCR引擎的强大功能,用亚洲语言创建文档图像的强大格式化输出。
亚洲版输出格式:
·  TXT
·  Word
·  Excel
·  HTML
·  PDF 

 

功能增强


OCR——改进OCR布局、分区顺序和文档

21c94ebab7e64b349fc0a74e76e8c3c0ojpg.NET,C,C ++和C#OCR
ImageGear OCR可用于Windows上的多种平台和语言,包括C,C ++,C#和其他.NET语言。ImageGear提供超过100种语言的全页光学字符识别(OCR),包括西方和亚洲语言如中文、日文和韩文。ImageGear的自动语言检测功能使OCR功能完善。
OCR可作为附件购买,为应用程序开发提供完整的文档图像库。我们的C#OCR SDK:
·  包括100多种不同的语言
·  检测并读取中文、韩文和日文
·  识别单个图像中的多种语言的字符
·  OCR样本可用于C#,VB.NET,C和C ++
全页OCR
·  通过我们的自动分区和细分功能,你的用户可以:
·  将页面自动分割为各个区域进行处理
·  根据流程、表格或图形将类型分配给定位的区域
·  用先进技术检测表格,改善数据结果重构
·  处理页面的全幅图像或单个区域
·  由用户定义区域,从文件加载或由引擎自动检测
最大精度的图像预处理
OCR之前会发生什么?看看OCR的预处理步骤:
·  高级图像处理方法可用于提高OCR精度
·  自动反转功能检测图像是否需要反转以获得最高精度
·  自动图像方向检测和调整图像
·  纠错方法检测图像并自动校正,提高分割和识别精度
·  去斑方法去除图像捕获过程中的污点和缺陷
·  分辨率增强提高了低分辨率图像的质量
预定义和可定制的字典
ImageGear的OCR在扫描文档时使用预定义的字典和数据字典。ImageGear使用17种不同语言的高级拼写检查,每种语言都在特定字典中。17个词典中的每一个都包含100,000到200,000个条目。垂直字典可以改善医疗和法律行业的拼写检查和OCR准确性。
卓越的结果处理
ImageGear OCR引擎以Unicode格式处理所有数据。可以为具有多个输出选项的特定代码页格式化数据输出,如:
·  PDF上的图像
·  基于文本的PDF
·  Microsoft Office 2007
·  Microsoft Office 97(Word,Excel和Powerpoint)
·  RTF
·  HTML
·  XML
OCR版本:ImageGear的功能选项
ImageGear有三个不同的功能选项。三个选项之间的主要区别是OCR引擎创建的输出格式。你的开发选项如下:
1、标准版
标准版为西方语言(如英语)创建输出格式。标准版仅输出文本文件并生成PDF。它包括的文件格式是可搜索的文本PDF和文本文档。
2、标准版Plus
标准版本Plus为西方语言(如英语)创建格式化输出。使用识别技术创建格式化的输出,以识别字体细节、定位图像区域并识别表格结构以创建原始文档。它包括的文件格式有Word、Excel、HTML、可搜索的PDF和文本文档。
3、亚洲版
亚洲版为亚洲语言(如中文,日语和韩语)创建格式化的输出。这种格式化的输出是使用与标识字体相同的识别技术来创建的,它标识字体细节、定位图像区域,并识别表格结构。格式包括Word、Excel、HTML、可搜索的PDF和文本文档。
*目前该功能仅适用于ImageGear for .NET。
 

PDF/A——丰富的PDF/A,并具有PDF/A转换的合规性检查

55374f37758442cbb78dd8962f7c570dojpg将PDF文件转换成PDF/A文件
PDF/A是一种ISO标准类型的PDF文件,用于存档和长期保存文件,以便它们能够与原始文件完全一致。元素(如字体)必须是独立的或嵌入的,以保留原始文件的格式和属性。PDF/A已经在欧洲流行,在美国正成为更广泛使用的文件格式。
ImageGear PDF/A特点:
·  根据光栅图像文件和扫描的图像创建PDF/A文件
·  验证PDF/X(PDF/X-1a,PDF/X-3和PDF/X-4)和PDF/A(PDF/A-1a和PDF/A-1b)合规性的PDF文件
·  将不合格的PDF文件转换为符合PDF/A-1b的PDF文件
·  新的增强功能可以改善从PDF到PDF / A的合规检查和转换过程
*目前PDF到PDF/A转换仅在ImageGear .NET中可用。
 
 

未发布 苹果公司透露Siri新发音引擎的内部原理
by Harriet666 keys 分享 1505467031256
苹果公司透露了他们通过深度学习让Siri的发音更加自然的内幕。

iPhone用户使用自然语言向Siri提问,Siri也通过语音回答问题。Siri可以使用21种语言回答问题,遍布全球36个国家。在2017年WWDC大会上,苹果宣布了iOS 11上的Siri将使用最新的文本语音引擎。2017年8月,苹果的机器学习期刊透露了他们是如何让Siri的发音更加自然的。

iPhone上的语音是通过拼接预先录制的人类语音来生成的。先录制几个小时的语音,再把它们拆分成单词,然后再把单词拆成最基本的元素:音素。在生成句子的时候,系统会选择合适的音素,再把它们拼接在一起。
 
为音素选择合适的录音是一件很有挑战性的事情。每一个音素都要与发音相匹配,也要与相邻的其他音素相匹配。旧系统只有几种录音,音素的来源很有限,所以听起来有点不自然。于是苹果决定使用深度学习来确定声音单元在句子中的各种属性。
 
每一台iOS设备都包含了一个小型的预录音素数据库。每一份数据都包含了音频属性:声音频谱的音高和音长。一个经过训练的“深度混合密度网络(deep mixture density network)”用于预测每一个音素在句子中的特征。苹果设计了一个成本函数来训练这个网络,着重考虑到两个方面的问题:如何让音素与发音相匹配以及如何让它与句子相融合。
 
在通过“Viterbi”算法从数据库里找到需要的数据后,系统会选出最佳的音素组合,把它们拼接起来,然后播放出声音。
 
另一种方式是生成声波,而不是拼接预录的声音。2016年9月,Alphabets Deepmind发布了WaveNet引擎,可以基于电脑生成文本语音。它的不足是速度很慢,就算使用最快的台式电脑也需要很长时间才能完成合成任务。所以,Siri不会在短时间使用合成语音代替录制语音。
未发布 Edraw Max(亿图图示)新手福音:教你思维导图的简单画法!
by Harriet666 keys 分享 1499408993146
思维导图,也就是心智图或者脑图,是近年来十分流行的一种有效地思维管理方法。Edraw Max(亿图图示)作为国内仅有的一款综合类型的图形图表设计软件,除了强大的绘图功能,还有丰富的模板和例子,在绘制思维导图方面也十分的简单、快捷,画出来的图表也更专业、时尚!本文总结了Edraw Max(亿图图示)几点基本的绘图方法、步骤,希望能帮助你更轻松、高效地画出你心中的思维导图!目前Edraw Max(亿图图示)在线订购享75折优惠活动正在进行中,欢迎您下载、购买进行运用!
 
Edraw Max(亿图图示)V8.7中文版点击下载>>>
 

第一步:快速创建思维导图

1、打开亿图思维导图软件,点击新建中的“思维导图”;
2、选择从“模板”或者“例子”中新建,双击即可直接进入;
3、在思维导图的编辑界面你会发现自动为你打开了相对应的库和思维导图菜单栏。
 

第二步:添加主题

方法1:通过用浮动按钮添加:点击浮动按钮右侧功能键进行添加,如下图所示:

 
方法2: 从符号库中添加:
1、软件界面左侧的符号库中有内置的图形符号,根据需求选择相对应的图形,直接拖拽至绘图界面即可;
2、只要该图形拖拽至需要吸附的主题附近,然后松开鼠标就会自动吸附了。
 

第三步:通过“思维导图”菜单栏进行编辑

1、插入主题或者副主题:选中需要添加主题或者副主题的图形,点击“插入主题”或者“副主题”即可。

 
2、插入多个主题:选中需要插入的图形,点击“添加多个主题”,然后在弹出的文本框中输入需要添加的主题名称,一行代表一个主题,如下图所示:

 
3、插入关系:
方法1:点击“插入关系”后,将鼠标移动至绘图界面,当鼠标靠近主题或者副主题附近时,会出现许多的连接点,只要将鼠标移动至需要添加的连接点上,就会出现红色的标识,如下图
所示,然后点击鼠标左键并移动至下一个连接点,再放开鼠标即可。
方法2:通过软件界面左侧“符号库”中的“关系”同样也可以添加关系,将其直接拖拽至绘图界面,然后调整箭头的两个链接点即可。
PS:连接线上一般有两个黄色的菱形符号,拖动它可以对线条的弧度、方向等进行调整。
 
4、插入图形、照片
方法1:从符号库中添加:点击符号库中小图标,根据预览的图片选择需要的符号库,然后拖拽至绘图界面或者双击都可以。当拖动到思维导图旁,出现一个橙色的框显示时,该符号就已
黏附到导图中了。
 
方法2:在打开所需要的符号库后,点击“思维导图”菜单栏下的“从库中插入图形”,然后在下拉框中点击相应图形,即可插入至思维导图主题中。此方法插入的图形与主题是依附在一起的,移动主题时,图形也一起在移动。
 
方法3:通过“插入图片”添加,点击“思维导图”菜单下的“插入图片”,即会弹跳出选择图片的窗口,然后在电脑文件中选择相应图片,点击打开即可添加至导图的标题中。此方法可以对插入图片的位置进行调整。
 
5、对主题进行编号:点击思维导图菜单的编号按钮,即可给整个导图添加编号,再点击一次则取消编号。
6、修改思维导图主题:此功能可以快速的调整整个思维导图的样式,其中包含线条、外框、填充、字体、颜色以及形状属性等等。
 

第四步:调整思维导图的布局

Edraw Max(亿图图示)提供了七种布局样式,可以一键自动将思维导图进行布局整理,让整个思维导图结构更清晰、明了!
 

第五步:保存、导出以及打印

1、保存:可直接保存到本地、个人云盘或者团队云。

 
2、导出:亿图软件支持导出为各种格式的文件,其中包括图片、PS、PDF、Office、HTML、Visio、SVG。

 
3、打印:亿图软件作为一款纯矢量的绘图软件,在打印时,无论将图表放大多少倍,依旧打印十分清晰。同时如果需要多页打印,还可以对打印页面进行统一设置,让打印更方便、快捷!
未发布 【更新】支持多种格式音视频的本地.NET组件Audio Sound Recorder for .NET 更新至v9.0.0.0
by Harriet666 keys 分享 1510908930689
Audio Sound Recorder for .NET是一款本地.NET组件,它可以轻松把录音功能添加到用Visual Studio.NET和Borland Developer Studio编写的Winforms应用程序中。

Audio Sound Recorder for .NET v9.0.0.0最新版下载

Audio Sound Recorder for .NET v9.0.0.0更新内容:
新功能
  • 支持播放声音,同时通过鼠标手动滚动波形滚动条。
  • 支持通过外部编码器FdkAac.exe以AAC+格式记录和导出。
  • 支持播放录制声音。
  • 支持对录制声音进行高速播放,可以将声音保持原始速度。
  • 支持以HLS格式(HTTP Live Streaming)进行流媒体回放。
  • 增加了将Wasapi采集或回送设备的立体声录音会话分为两个单声道输出文件的可能性
  • 增加了切换立体声分离录制会话的单声道输出文件的功能
  • 波形分析仪的新选项
      - 波形现在可以基于绝对值显示检测到的峰值
      - 更多地控制时间标尺上显示的时间字符串的格式
      - 可选的自动垂直缩放功能,用于低音量级别的波形
  • 回放期间显示在波形视觉反馈上的峰值现在通过专用事件报告给容器应用程序。
  • 增加了在录制和回放过程中检索峰值电平和RMS(均方根)电平的支持。
  • 增加了从波形分析仪中检索包含波形峰值的缓冲区的可能性
 
新属性
  • EncodeFormats.AACPlus (class)
 
新方法
  • CallbackWaveformValueChangeSet
  • StartSplitFromWasapiCaptureDevice
  • StartSplitFromWasapiLoopbackDevice
  • SwitchOutputFilesOnSplit
  • StreamPeakLevelsGet
  • RecordedSound.PlaybackRateGet
  • RecordedSound.PlaybackRateSet
  • RecordedSound.PlaybackTempoGet
  • RecordedSound.PlaybackTempoSet
  • RecordedSound.PlaybackRateRatioGet
  • RecordedSound.SoundDirectionEnable
  • RecordedSound.SoundDirectionGet
  • RecordedSound.SoundDirectionIsEnabled
  • RecordedSound.SoundDirectionSet
  • WASAPI.MixerInputDevicePeakLevelsGet
  • WaveformAnalyzer.AutoZoomEnable
  • WaveformAnalyzer.SettingsRulersTimeFormatSet
  • WaveformAnalyzer.PeaksBufferLengthGet
  • WaveformAnalyzer.PeaksBufferGet
  • WaveformScroller.PlaybackOnScrollEnable
  • WaveformScroller.PlaybackOnScrollInfoGet
 
新事件
  • WaveformValueChange
 
新的回调委托
  • CallbackWaveformValueChange
 
新的类
  • EncodeAACplus

试用、下载、了解更多产品信息请点击"咨询在线客服"  

未发布 开发者在增加移动APP收益时必须做的5件事
by Harriet666 keys 分享 1487667101099

点击查看详细内容,增加你的APP收益>>>

如今手机应用市场越来越大,其中创新、独特的产品也越来越多。APP市场最好的地方就是无论是iTunes还是Google Play中,你都有平等的机会参与竞争和获得成功。这是一个公平的竞争环境,吸引着无数优质的开发商。专家们已经预测,APP市场在2020年将翻一番,价值可以达到101亿美元。

无论你是一个多优秀的开发者,在开始新的APP应用时也应该注意一些事情。在启动一个APP项目时你应该记住和经过几个重要的步骤来确保它能成功。


未发布 LEADTOOLS的新功能Document Composer可以让你在多个文件中创建文档
by Harriet666 keys 分享 1492417840533

作为LEADTOOLS v19更新的一部分,新版本向Document Viewer添加了一个新的虚拟文档功能。 LEADTOOLS Document Composer界面可以轻松地从任意数量的页面以及来自多个源文档的文件中创建虚拟文档。你可以在查看该文档时进行修改,并可以使用代码添加或删除页面,也可以使用拖放来进行交互式操作。由Document Composer创建的虚拟文档可以保存在服务器上,与多个用户共享,并导出为任何格式。

从任何源文件中构建或撰写文档意味着什么?想象一下,房地产经纪人准备与客户会面,并想要准备几个房产相关的打印资料。他的计算机或云盘上收集了一些文件:PDF格式的列表、DOCX格式的列表、谷歌地图的截图,甚至是访问其他客户时的一些个人照片。房地产经纪人可以使用LEADTOOLS Document Composer从每个源文件中单击并拖动所需的页面并创建新的虚拟文档,然后将其打印出来参与会议,也可以将虚拟文档导出为新的PDF并通过电子邮件发送。

如果你想要尝试该功能,请查看Document Composer演示应用程序,或直接下载最新的LEADTOOLS安装程序!

有用(0)

未发布 HttpWatch v10.x发布,支持在Firefox 35-35版中使用HTTP/2丨附下载
by Harriet666 keys 分享 1491983832839

HttpWatch是一款集成的HTTP嗅探器,为IE和Firefox提供新的方法以查看您网站的负载和运行情况。你可以直接在浏览器中调试由web页面生成的网络流量,而无需切换到一个单独的工具。

【最新的HttpWatch点击免费下载>>>】

httpwatch v10.x新功能


密码在日志文件中被隐藏

从用户中收集的关于HTTP跟踪文件的常见问题是该文件可能包含了在登录期间输入的密码。默认情况下配置HttpWatch来隐藏提交的Web表单中的可疑密码字段:
HttpWatch
用于识别敏感字符串的子字符串列表可以编辑,并掩盖POST消息中的其他敏感字段:
HttpWatch

在Firefox35-40中支持HTTP/2

HttpWatch支持在Firefox 35-35版中使用HTTP/2
httpwatch
未发布 Windows Forms界面控件包Essential Studio for Windows Forms发布2017 v4
by Harriet666 keys 分享 1513933983173
Essential Studio for Windows Forms界面控件包含了高性能的Windows应用程序开发中所需的所有控件,如Grids、Charts、Gauges、Menus、Calendars、Editors等等。 到目前为止,我们开发Windows Forms 控件包已达十几年,所以该控件包是功能最齐全的控件集。除此之外,Essential Studio for WinForms还包含了一些特有控件,使您可以为应用程序添加Excel、Word和PDF格式文件的浏览和创建功能。
 
 

计算

数组公式计算
Excel中提供了对数组公式计算的支持。数组公式可以使用数组或一系列数据值执行多个计算,并返回一个或多个结果。这有助于简化公式表达式。例如,“= MAX(B1-C1,B2-C2,B3-C3,B4-C4,B5-C5)”现在可以用阵列公式“{= MAX(B1:B5-C1:C5) }”。

日期时间选择器

支持Office 2016主题
日期时间选择器控件支持Office 2016主题外观。
3cf9009f8fc24e058374276f3d8b158bojpg

DOCIO

增强Word转换成PDF功能
DocIO现在允许将带有行号的Word文档以其原始格式转换为PDF。
22d40794b650427d81577b92c4c5ff14ojpg

GROUP BAR

支持Office 2016主题
支持Office 2016主题外观,用于群组控件。
bc09d0030ed948aaabf990981a6fbd7cojpg

主框架栏管理器

支持Office 2016主题
主框架管理器控件支持Office 2016主题外观。
3e13844290e44422b68013d299856685ojpg

高级月历

支持Office 2016主题
高级月历控件支持Office 2016主题外观。
6f1de36f33ef4222922d703f6a09b2c0ojpg

RIBBON

快速访问工具栏的图标
为快速访问工具栏提供不同的图标,类似于Office多彩主题。
3883de1a67d047de902ef63607f65d54ojpg
定制
RIBBON系统按钮的外观可根据您的需求进行定制。
cbe4006720814c71bf53d4af887c3a0bojpg

电子表格

数组公式计算
Excel中提供了对数组公式计算的支持。数组公式可以使用数组或一系列数据值执行多个计算,并返回一个或多个结果。这有助于简化公式表达式。例如,“= MAX(B1-C1,B2-C2,B3-C3,B4-C4,B5-C5)”现在可以用一个阵列公式“{= MAX(B1:B5-C1:C5) }”。
Single-Cell Array Formula
cce526e4a7b84d659d4c0ef3d8008e40ojpg
Multi-Cell Array Formula
654a1a76fbe64f629c67b0b6408564a0ojpg

XLSIO

增强图像
图表元素(如图例、标题、绘图区和显示单元)的手动布局位置现在可以正确转换为图像。
1b2941b030d74fd28106463dcbc87372ojpg
未发布 MailBee.NET Objects退回邮件教程(二):POP3部分
by Harriet666 keys 分享 1503567760428
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,
简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。

MailBee.NET Objects介绍和试用点击查看>>>
 
 
本文主要介绍了SMTP服务器退回邮件的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!
 
在上期的SMTP部分中,我们将退回的电子邮件发送到指定的单个电子邮件地址。
 
每封退回的电子邮件都包含失败的电子邮件地址(以及其他信息)。这个失败的地址是我们想知道的。这个任务看起来很简单 - 你需要做的是扫描退回的
邮件以确定地址的典型字段。但是有一个隐藏的危险:每个邮件服务器都有自己的邮件退回格式。虽然它们几乎具有相同的“From”和“主题”字段,但是退回地址可以在邮件的任何位置。MailEnable服务器的典型退回邮件如下所示:
From: POSTMASTER@domain.com
To: jdoe@domain.com
Subject: Message Delivery Failure

MailEnable: Message Delivery Failure.

The following recipient(s) could not be reached: 

Recipient: [SMTP: bill@domain.com] Reason: The message could not be delivered because the domain name (domain.com) does not appear 

to be registered.

函数GetInvalidEmailAddressME()检查邮件是否被退回,并从退回的邮件中提取失败的地址。由于退回邮件格式不同,此功能仅对MailEnable服务器有效。例如,如果你正在使用Communigate Pro服务器,则退回消息如下所示:
From: MAILER-DAEMON@domain.local
To: jdoe@localhost Subject:
Undeliverable mail:

Failed to deliver to ''
 
正如你所看到的,这个退回的邮件与前一个几乎相同。使用哪个服务器并不重要,退回信息总是有From,To和Subject字段,退回信息在其正文中有失败的地址。函数GetInvalidEmailAddressCP()与前一个函数几乎相同; 区别仅在于检查邮件字段并搜索失败的地址。支持尽可能多的退回电子邮件格式至关重要。这就是为什么你需要修改GetInvalidEmailAddress()函数,以适应服务器使用的退回电子邮件格式。
 
注意:在某些情况下,你可能需要扫描退回的电子邮件以获取其他信息。如果由于暂时的问题,退回的邮件到达,则不要删除电子邮件地址:邮箱超过配
额,邮件服务器关闭等。退回邮件可以分为两种类型:硬邮件和软邮件。如果是不存在的帐户或域,则会发生硬性退回。其他故障,如完整的邮箱或暂时
不可用的域,则是软性退回。你可以为数据库中的每个地址进行计算。也许下一次尝试发送邮件到具有一些软性退回的地址时将成功。
 
代码示例:
在此示例中,我们从指定的帐户中检索退回的电子邮件,然后从每个退回的电子邮件中提取失败的电子邮件地址。失败的地址传递给RemoveEmailFromDatabase子程序,该子程序必须从数据库中删除失败的地址。应用程序还会从服务器中删除退回的电子邮件,以避免下次处理。
C#:
// Create POP3 object
Pop3 pop = new Pop3();

// Enable logging to file
pop.Log.Enabled = true;
pop.Log.Filename = @"C:\log.txt";
pop.Log.Clear();

// Connect to POP3 server
pop.Connect("mail.domain.com");
pop.Login("bounce", "secret");

// Download headers and bodies of all messages.
MailMessageCollection msgs = pop.DownloadMessageHeaders(1, -1, -1);
                        
// Loop through all messages in the mailbox
foreach (MailMessage msg in msgs)
{
        string strLine = msg.BodyPlainText;
        Console.WriteLine("From: " + msg.From.Email);
                                
        // Get failed email address
        string str_invalid_email =  GetInvalidEmailAddressME(msg);

        // If str_invalid_email is non-empty then failed email 
        // address was found
        if (str_invalid_email.Length > 0)
        {
                // Remove failed email from database
                RemoveEmailFromDatabase(str_invalid_email);

                // Display invalid adress
                Console.WriteLine("Invalid email: " + str_invalid_email);                

                // Delete bounced email from server to avoid
                // processing it next time
                pop.DeleteMessage(msg.IndexOnServer);
        }
}

// Disconnect from POP3 server
pop.Disconnect();

// The function checks whether the message is bounced and extracts 
// failed address 
// from bounced message. Valid only for MailEnable servers
static string  GetInvalidEmailAddressME(MailMessage msg)
{
        string str_invalid_email = msg.BodyPlainText;

        // Check if this is a bounced message report
        if (msg.Subject.IndexOf("Delivery Failure") == -1)
{ 
                return "";
        }
        if (msg.From.ToString().IndexOf("POSTMASTER") == -1)
        {
                return "";
        }

        // Now we're sure this is a bounced message report
        int i_start;
        i_start = str_invalid_email.IndexOf("SMTP:");

        // Check if bounced message report contains "Recipient:" field
        if (i_start == -1)
        {
                return "";
        }
                        
        // Get failed address
        i_start += 5;
        i_end = str_invalid_email.IndexOf("]",i_start);
        str_invalid_email.Substring(i_start, i_end);
                        
        return str_invalid_email;
}

// The function checks whether the message is bounced and extracts 
// failed address 
// from bounced message. Valid only for Communigate Pro servers
static string  GetInvalidEmailAddressCP(MailMessage msg)
{
string str_invalid_email = msg.BodyPlainText;

        // Check if this is a bounced message report
        if (msg.Subject.IndexOf("Undeliverable mail") == -1) 
        {
                return "";
        }
        if (msg.From.ToString().IndexOf("MAILER-DAEMON") == -1) 
        {
                return "";
        }

        // Now we're sure this is a bounced message report
        int i_start;
        i_start = str_invalid_email.IndexOf("to '<");

        // Check if bounced message report contains 
        // "Failed to deliver to " field
        if (i_start == -1)
        { 
                return "";
        }
                        
        // Get failed address
        i_start += 5;
        i_end = str_invalid_email.IndexOf("]",i_start);
        str_invalid_email.Substring(i_start, i_end);
                        
        return str_invalid_email;
}

// This function must remove (or disable) specified
// email address from mailing list
static void RemoveEmailFromDatabase(string str_invalid_email)
{
// TODO: Add your code here                        
}
 
VB.NET:
Dim pop As New Pop3

' Enable logging to file
pop.Log.Enabled = True
pop.Log.Filename = "C:\log.txt"
pop.Log.Clear()

' Connect to POP3 server
pop.Connect("mail.domain.com")
pop.Login("jdoe", "secret")

' Download headers and bodies for all messages.
Dim msgs As MailMessageCollection = pop.DownloadMessageHeaders(1, -1, -1)

' Loop through all messages in the mailbox
Dim msg As MailMessage
For Each msg In msgs
        Dim strLine As String = msg.BodyPlainText
        Console.WriteLine("From: " + msg.From.Email)

        ' Get failed email address
        Dim str_invalid_email As String = GetInvalidEmailAddressME(msg)

        ' If str_invalid_email is non-empty then failed email 
        ' address was found
        If str_invalid_email.Length > 0 Then
                'Remove failed email from database
                RemoveEmailFromDatabase(str_invalid_email)

                ' Display invalid address
                Console.WriteLine("Invalid email: " & str_invalid_email)

                ' Delete bounced email from server to avoid
                ' processing it next time
                pop.DeleteMessage(msg.IndexOnServer)
        End If
Next
Console.ReadLine()

' Disconnect from POP3 server
pop.Disconnect()

' The function checks whether the message is bounced and extracts 
' failed address 
' from bounced message. Valid only for MailEnable servers
Function GetInvalidEmailAddressME(ByVal msg As MailMessage) As String
        Dim str_invalid_email As String = msg.BodyPlainText

        ' Check if this is a bounced message report
        If msg.Subject.IndexOf("Delivery Failure") = -1 Then
                Return ""
        End If
        If msg.From.ToString().IndexOf("POSTMASTER") = -1 Then
                Return ""
        End If

        ' Now we're sure this is a bounced message report
        Dim i_start As Integer, i_end As Integer
        i_start = str_invalid_email.IndexOf("SMTP:")

        ' Check if bounced message report contains "Recipient:" field
        If i_start = -1 Then
                Return ""
        End If

        ' Get failed address
        i_start += 5
        i_end = str_invalid_email.IndexOf("]", i_start)
        str_invalid_email.Substring(i_start, i_end)

        Return str_invalid_email
End Function

' The function checks whether the message is bounced and extracts 
' failed address 
' from bounced message. Valid only for Communigate Pro servers
Function GetInvalidEmailAddressCP(ByVal msg As MailMessage) As String
        Dim str_invalid_email As String = msg.BodyPlainText

        ' Check if this is a bounced message report
        If msg.Subject.IndexOf("Undeliverable mail") = -1 Then
                Return ""
        End If
        If msg.From.ToString().IndexOf("MAILER-DAEMON") = -1 Then
                Return ""
        End If

        ' Now we're sure this is a bounced message report
        Dim i_start As Integer, i_end As Integer
        i_start = str_invalid_email.IndexOf("to '<")

        ' Check if bounced message report contains 
        ' "Failed to deliver to " field
        If i_start = -1 Then
                Return ""
        End If

        ' Get failed address
        i_start += 5
        i_end = str_invalid_email.IndexOf("]", i_start)
        str_invalid_email.Substring(i_start, i_end)

        Return str_invalid_email
End Function

' This function must remove (or disable) specified
' email address from mailing list
Sub RemoveEmailFromDatabase(ByVal str_invalid_email As String)
        ' TODO: Add your code here                        
End Sub
未发布 MailBee.NET Objects发送电子邮件(SMTP)教程三:没有SMTP服务器的情况下发送消息
by Harriet666 keys 分享 1493716753597
 
发送消息的最简单的方法是使用Smtp类的QuickSend方法(此方法是静态的,不需要你创建Smtp类的实例)。
 
即使没有SMTP服务器,QuickSend方法也可以发送电子邮件。该方法通过向网络设置中注册的DNS服务器进行查询,确定哪些服务器接收电子邮件的To / CC / BCC字段中指定的域的邮件,然后将电子邮件直接发送到收件人的邮件服务器。
C#:
MailBee.SmtpMail.Smtp.QuickSend("jdoe@domain.com", "bill@domain.com", "Subject", "Message Body");           
VB.NET:
MailBee.SmtpMail.Smtp.QuickSend("jdoe@domain.com", "bill@domain.com", "Subject", "Message Body")
 
如果要手动指定DNX MX查找DNS服务器,可以编辑应用程序的app.config或web.config文件,并将MailBee.DnsMX.DnsServerCollection键放该位置。有关详细信息,请参阅DnsAutodetectOptions文档。
 
备用(和更高级)的方法是创建Smtp对象并手动指定DNS服务器的IP地址:
C#:
mailer.DnsServers.Add("127.0.0.1");                                                          
VB.NET:
mailer.DnsServers.Add("127.0.0.1")
 
要通过检查系统属性自动填充Dns服务器,请使用Autodetect方法(顺便说一下,QuickSend方法可以使用Autodetect来确定可用的DNS服务器列表):
C#:
mailer.DnsServers.Autodetect();                                                     
VB.NET:
mailer.DnsServers.Autodetect()
 
此外,你可以指定用于调整在系统中注册的DNS服务器的自动检测选项。有关详细信息,请参阅DnsAutodetectOptions文档。
 
注意:由于发送垃圾邮件的人经常使用直接发送操作,因此许多邮件服务不接受来自未知主机的邮件提交。建议仅从指定的MX、PTR和SPF记录的域执行直接发送操作。在这种情况下,接收邮件的主机将能够验证发件人的域名并接受邮件提交请求。
 

试用、下载、了解更多产品信息请点击"咨询在线客服"   

 近期热门 - 点击最多
  1. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  2. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  3. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  4. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  5. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  6. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法
  7. Springboot+Gradle+Mysql+Jpa最简单实例教程
  8. SpringBoot+Spring6入门指南: 使用命令行快速搭建restful web api模板
  9. 如何通过 winax 的 ActiveXObject 或 Excel.Application 往 excel 中插入一张图片
  10. node.js用activex/com+自动化读写excel时查询接口、参数的调试方法

  全端社区 - 最新回复
  1. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  2. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  3. Node.js 打印vite react+go项目目录树
  4. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  5. Windows与Mac通过git ssh和rsync实现文件共享互传
  6. Windows与Mac通过git ssh和scp实现文件共享互传
  7. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  8. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件
  9. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  10. ReactNative获取Android/iOS的MAC/IP地址: react-native-device-info模块的安装与使用

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA