未找到

未发布 企业级界面开发工具包Essential Studio Enterprise Edition发布2017 v4丨附下载
by Harriet666 keys 分享 1512637148118

Essential Studio企业版是一个企业级界面开发工具包,包含800多个.NET和JavaScript平台的组件和框架。使用Essential Studio企业版,开发者可以创建丰富的应用程序,并轻松地集成商业智能分析和报告解决方案。Essential Studio企业版是世界级的软件组件,它使得开发者能在最苛刻的环境下开发出高质量的软件。

Essential Studio 2017 v4最新版下载>>>

Essential Studio 2017 v4更新内容

JavaScript


   充分利用JavaScript

    • Essential JS 2是下一代的JavaScript组件套件

    • 支持Ember框架

    • 新的组合框架

 

Xamarin.Forms


   构建跨平台的应用程序

    • 新的图表控件

    • 数据网格的多列分组

    • 图像编辑器的缩放和平移功能

 

Xamarin.iOS


   用C#创建优秀的iOS应用程序

    • 新的图表控件

    • 图像编辑器的缩放和平移功能
 

Xamarin.Android


   用C#开发Android应用程序

    • 新的图表控件

    • 图像编辑器的缩放和平移功能

 

ASP.NET Core


   发布卓越的Web应用程序

    • 新的日期范围选择器

    • 新的组合框

    • 新的pivot客户端控件

 

ASP.NET MVC


   创建Web应用程序

    • 新的组合框

    • 服务器下拉列表

    • 树形网格控件的堆叠标题

 

ASP.NET Web Forms


   开发大师级网站

    • 新的组合框

    • 服务器下拉列表

    • 树形网格控件的堆叠标题

 

UWP


   开发跨Windows生态系统

    • 新的图像编辑器

    • 史密斯图

    • 支持富文本框从右到左

 

WPF


   桌面控制

    • 史密斯图

    • 数据网格的行拖放

    • 支持富文本框从右到左

 

Windows Forms


   创建更好的APP

    • 电子表格的数组公式计算

    • 日期时间选择器的Office 2016主题

    • ribbon控件的快速访问工具栏图标功能

未发布 邮件客户端WebMail Pro更新至v7.7.7丨附下载
by Harriet666 keys 分享 1516180735591
AfterLogic WebMail Pro是基于网页并以脚本开发的邮件客户端。能以前端模式与现有的邮件服务器或内置邮件服务器工作。
 

WebMail Pro

 
v7.7.7更新内容
  • 纯文本编辑器功能 - “webmail.allow-compose-plain-text”和“webmail.compose-plain-text-default”设置(config.php)。
  • 按域启用/禁用组件功能(仅适用于Aurora)。
  • 修复了几个潜在的漏洞。
 
v7.7.6更新内容
  • Dropbox API更新至版本2。
  • 更新了Ubuntu/Debian的WebMail Lite软件包。
  • 波兰语翻译更新。
  • 修复了XSS漏洞。
未发布 【示例教程】使用leadtools的WCF接口功能实现从web端上传Dicom影像文件
by Harriet666 keys 分享 1517903663716
Leadtools 19总套包下载>>>
 
leadtools为web端提供了wcf接口来供用户可以登录pacs系统,检索,查看以及上传影像。本篇博客讲解如何创建一个网页来实现上传功能,通过WCF进行dicom文件的上传时,是将dicom文件转换为base64数据流,分段进行传输。
 
本篇博客运行的前提是已经部署完成Leadtools HTML5 Web Viewer,可以正常浏览。参考https://www.evget.com/article/2018/2/6/27757.html
 
在部署完成后,将下面的代码复制到一个HTML文件中,即可运行进行测试。另外需要添加html文件所需的jquery.min.js到同文件夹路径下。
<head>
    <meta charset="UTF-8">
head>

<form onsubmit="return false;">
    <input type="hidden" name="file_base64" id="file_base64">
    <input type="file" id="fileup" multiple="multiple">
    <input type="submit" value="submit" onclick="$.post('./uploader.php', $(this).parent().serialize());">
    <div>
        <div id="msg">div>
    div>
form>
<script src="scripts/jquery.min.js">script>
<script>

    $(document).ready(function () {
        authcookie = login();
        document.cookie = "authcookie=" + authcookie;
        $("#fileup").change(function () {
            getauthcookie("authcookie");
            filelist = this.files;
            file = filelist[fileindex];
            upload(file);
        });
    });
    var authcookie;//保存authcookie
    var filelist;//上传文件列表
    var file;//当前上传文件
    var tempfile = "";//临时文件名称
    var position = 0;
    var size = 40000;//分段大小
    var done = false;
    var fileindex=0;//当前上传文件序列号

    function upload(tempfile) {
        if(position==0)
            done=false;
        var reader = new FileReader();
        if (file.size > position + 40000)
            reader.readAsArrayBuffer(file.slice(position, position + 40000));
        else 
            reader.readAsArrayBuffer(file.slice(position, file.size));
        reader.onload = function (e) {
            if (e.target.readyState === 2) {
                var base64string = base64ArrayBuffer(e.target.result);
                var data = {
                    authenticationCookie: authcookie,
                    dicomData: base64string,
                    fileName: tempfile,
                    status: position==0?"start":"append"
                };
                tempfile = senddata(JSON.stringify(data));
                if (!done) {
                    position += 40000;
                    upload(tempfile);
                    if (position+40000>file.size)
                        done = true;
                }
                else {
                    var data = {
                        authenticationCookie: authcookie,
                        dicomData: "",
                        fileName: tempfile,
                        status: "done"
                    };
                    tempfile = senddata(JSON.stringify(data));
                    position = 0;
                    $("#msg").html($("#msg").html()+"第"+(fileindex+1)+"个文件已经上传完成

"); fileindex += 1; if (fileindex < filelist.length) { file = filelist[fileindex]; upload(tempfile); } else { fileindex = 0; $("#msg").html($("#msg").html() + "文件全部已经上传完成

"); } } } }; } function senddata(data) { var result; $.ajax({ type:"post", url: "http://localhost/MedicalViewerService19/StoreService.svc/UploadDicomImage", data: data, contentType: "application/json", dataType: "json", success: function(data){result= data}, async: false }); return result; } function login() { var auth; var logininfo = { userName: "a", password: "a", userData: "" }; $.ajax({ type: "post", url: "http://localhost/MedicalViewerService19/AuthenticationService.svc/AuthenticateUser", data: JSON.stringify(logininfo), contentType: "application/json", dataType: "text", success: function (data) { auth= data }, async: false }); return auth; } function query() { } function getauthcookie() { document.cookie.split(";").forEach(function (val, index) { var index = val.indexOf("="); if ($.trim(val.substring(0, index)) == "authcookie") { authcookie = $.trim(val.substring(index + 1, val.length)); } }); return ""; } function base64ArrayBuffer(arrayBuffer) { var base64 = ''; var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; var bytes = new Uint8Array(arrayBuffer); var byteLength = bytes.byteLength; var byteRemainder = byteLength % 3; var mainLength = byteLength - byteRemainder; var a, b, c, d; var chunk; // Main loop deals with bytes in chunks of 3 for (var i = 0; i < mainLength; i = i + 3) { // Combine the three bytes into a single integer chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; // Use bitmasks to extract 6-bit segments from the triplet a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18 b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12 c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6 d = chunk & 63; // 63 = 2^6 - 1 // Convert the raw binary segments to the appropriate ASCII encoding base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; } // Deal with the remaining bytes and padding if (byteRemainder == 1) { chunk = bytes[mainLength] a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2 // Set the 4 least significant bits to zero b = (chunk & 3) << 4; // 3 = 2^2 - 1 base64 += encodings[a] + encodings[b] + '=='; } else if (byteRemainder == 2) { chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10 b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4 // Set the 2 least significant bits to zero c = (chunk & 15) << 2 // 15 = 2^4 - 1 base64 += encodings[a] + encodings[b] + encodings[c] + '='; } return base64; } script>

6

未发布 MailBee.NET Objects发送电子邮件(SMTP)教程五:发送带有嵌入图片的网页和HTML邮件
by Harriet666 keys 分享 1494839413968
MailBee.NET Objects介绍和试用点击查看>>>
 
为了发送带有嵌入对象的电子邮件,开发人员应该使用SMTP object。首先,开发人员应该按照【MailBee.NET Objects发送电子邮件(SMTP)教程一】中所述指定SMTP对象的所有必要属性。
 
如果HTML格式的邮件没有任何嵌入对象,开发人员可以使用SMTP.BodyHtmlText属性或SMTP.Message.LoadBodyText方法来设置邮件正文。
 
SMTP.BodyHtmlText属性允许开发人员直接分配邮件正文,如下所示:
C#:
oMailer.BodyHtmlText = @"
Test HTML message.



        
       


        This is a test HTML mes-sage.
       


       



        www.afterlogic.com";     
VB.NET:
oMailer.BodyHtmlText = "
Test HTML message.


" & vbCrLf & _
        "" & vbCrLf & _
        "

" & vbCrLf & _
        "This is a test HTML mes-sage." & vbCrLf & _
        "

" & vbCrLf & _
        "


" & vbCrLf & _
        "www.afterlogic.com"
 
也可以使用SMTP.Message.LoadBodyText方法。在这种情况下,开发人员可以从指定的URI中加载消息,如下所示:
C#:
oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm", MessageBodyType.Html);  
VB.NET:
oMailer.Message.LoadBodyText("http://www.domain.com/index.htm", MessageBodyType.Html)
 
或者
C#:
oMailer.Message.LoadBodyText(@"C:\Temp\saved_web_page.htm", MessageBodyType.Html);     
VB.NET:
oMailer.Message.LoadBodyText("C:\Temp\saved_web_page.htm", MessageBodyType.Html)

否则,开发人员应该调用SMTP.Message.LoadBodyText方法来编写一个包含嵌入对象(图像,音频或视频)的消息。以下示例将邮件正文加载为默认编码以及指定URI中的所有相关文件:
C#:
oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm ", 
                MessageBodyType.Html,
                Encoding.Default, ImportBodyOptions.ImportRelatedFiles|
                ImportBodyOptions.ImportRelatedFilesFromUris);       
VB.NET:
oMailer.Message.LoadBodyText("http://www.domain.com/index.htm ", _
                MessageBodyType.Html, _
                Encoding.Default, ImportBodyOptions.ImportRelatedFiles Or _
                ImportBodyOptions.ImportRelatedFilesFromUris)
 
请注意:在使用SMTP.Message.LoadBodyText方法时,所有相关文件将被添加到邮件中。
 
代码示例:
该示例从拥有嵌入对象的现有网页中创建新邮件并发送。在使用MailBee.NET Objects之前,请确保它已解锁。
C#:
using System;
using System.Text;
using MailBee;
using MailBee.SmtpMail;
using MailBee.Mime;
namespace EmailApp
{
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            Smtp oMailer = new Smtp();
            oMailer.To.AddFromString("Bill Smith ");
            oMailer.From.AsString = "John Doe (Company Info)";
            oMailer.Subject = "Test web page";
            oMailer.Message.LoadBodyText(@"http://www.domain.com/index.htm", MessageBodyType.Html, Encoding.Default, 
ImportBodyOptions.ImportRelatedFiles | ImportBodyOptions.ImportRelatedFilesFromUris);
            try
            {
                oMailer.Send();
                Console.WriteLine("The message has been successfully sent.");
            }
            catch (MailBeeSmtpMessageSizeOutOfRangeException e)
            {
                Console.WriteLine("The message is too large (more than " + e.MaxAllowedMessageSize + " bytes).");
            }
        }
    }
}
VB.NET:
Imports System
Imports System.Text
Imports MailBee
Imports MailBee.SmtpMail
Imports MailBee.Mime
 
Namespace EmailApp
    Class Class1
        
        Shared  Sub Main(ByVal args() As String)
            Dim oMailer As Smtp =  New Smtp() 
 
            oMailer.To.AddFromString("Bill Smith ")
 
            oMailer.From.AsString = "John Doe (Company Info)"
 
            oMailer.Subject = "Test web page"
 
            oMailer.Message.LoadBodyText("http://www.domain.com/index.htm", MessageBodyType.Html, Encoding.Default, 
ImportBodyOptions.ImportRelatedFiles | ImportBodyOptions.ImportRelatedFilesFromUris)
 
            Try
                oMailer.Send()
                Console.WriteLine("The message has been successfully sent.")
            Catch e As MailBeeSmtpMessageSizeOutOfRangeException
                Console.WriteLine("The message is too large (more than " + e.MaxAllowedMessageSize + " bytes).")
            End Try
        End Sub
    End Class
End Namespace
 
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。
未发布 Android Oreo 8.1终于发布正式版
by Harriet666 keys 分享 1513067839544
在推出开发者预览版一个月后,Android Oreo 8.1终于发布了正式版。除了之前InfoQ已经报道过的内容,Oreo 8.1还推出了Gero Go版,可运行在低内存配置的设备上。
 
在谷歌I/O 2017大会上发布的Android Go定位入门级机型,这些入门级设备的内存一般不会超过1GB。谷歌通过多种手段来达到该目的:
  • 全平台内存优化。
  • 优化谷歌官方应用,使用更少的内存、存储空间和网络带宽。
  • 推出新的Google Play特性,如FEATURE_RAM_LOW,以便更好地在入门级设备上运行。另外,Google Play为入门级设备推出了Go版本的应用,当然也可以安装其他任意一种应用。
Android Oreo 8.1最重要的一个特性是神经网络API(NNAPI),支持硬件加速,以便更好地执行机器学习任务,如创建、编译和执行模型。机器学习框架(如TensorFlow Lite等)可以使用NNAPI。
 
Android Oreo 8.1在下周就可以支持Pixel和Nexus,其他设备厂商则要等到下个月。Android 8.1的源代码已经发布出来了。

未发布 【FAQ合集】TWAIN扫描识别工具Dynamic Web TWAIN的编程代码问题
by Harriet666 keys 分享 1510217364852
Dynamic Web TWAIN中文介绍免费下载资源教程示例DEMO
Dynamsoft

1.如何获取黑白图像?

DWObject.OpenSource();
DWObject.IfShowUI = false;
DWObject.IfDisableSourceAfterAcquire = true;
DWObject.PixelType = EnumDWT_PixelType.TWPT_BW; //Black - White 
image : EnumDWT_PixelType.TWPT_BW, GRAY image: 
EnumDWT_PixelType.TWPT_GRAY, RGB 
image: EnumDWT_PixelType.TWPT_RGB
DWObject.AcquireImage();

2.如何在没有用户界面的情况下运行?

function BeginScan(){
    DWObject.OpenSource();
    DWObject.IfShowUI = false; //set without user interface
    DWObject.IfDisableSourceAfterAcquire = true;

    DWObject.AcquireImage();
}

function DWObject_OnPostTransfer(){
    DWObject.SaveAsBMP("C:\\temp.bmp",0);
}

3.如何只扫描纸张的某一部分?

DWObject.SelectSource();
DWObject.OpenSource();
DWObject.IfShowUI = false;
//Set Image Layout
DWObject.Unit = EnumDWT_UnitType.TWUN_INCHES;
DWObject.SetImageLayout(0, 0, 5, 5);
DWObject.AcquireImage(); 

4.如何在不显示设备选择对话框的情况下选择设备?

DWObject.OpenSourceManager();

for(i = 0, i<=DWObject.SourceCount - 1,i++){
    if (DWObject.GetSourceNameItems(i) == "Specified device name")
        DWObject.SelectSourceByIndex (i);
}

//if can't find the specified source, it'll select default source
DWObject.AcquireImage(); 

5.如何在不使用UI获取图像时禁用进度指示器对话框?

DWObject.IfShowUI = false;
DWObject.IfDisableSourceAfterAcquire = true;
DWObject.OpenSource();
DWObject.IfShowIndicator = false;
DWObject.AcquireImage();

6.如何分别设置水平和垂直分辨率?

DWObject.SelectSource();
DWObject.OpenSource();

//Set XRESOLUTION current value.
DWObject.Capability = 0x1118; //ICAP_XRESOLUTION
DWObject.CapType = 5; //TWON_ONEVALUE
DWObject.CapValue = 300;
if (DWObject.CapSet == false){
    alert( "Failed to set the x-resolution. " + DWObject.ErrorString);
}

//Set YRESOLUTION current value.
DWObject.Capability = 0x1119; //ICAP_YRESOLUTION
DWObject.CapType = 5; //TWON_ONEVALUE
DWObject.CapValue = 200;
if (DWObject.CapSet == false){
   alert( "Failed to set the y-resolution." + DWObject.ErrorString);
}

DWObject.AcquireImage();

7.如何上传到Web服务器?

DWObject = document.getElementById("dwtcontrolContainer");
//dwtcontrolContainer is the id of the Dynamic Web TWAIN on the page (An object or an embed).
function btnScan_onclick() 
{
DWObject.SelectSource();
DWObject.OpenSource();
DWObject.AcquireImage();
}
function btnUpload_onclick() 
{
var strActionPage;
var strHostIP;
var CurrentPathName = unescape(location.pathname); // get current PathName in 
plain ASCII 
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") 
+ 1); 
strActionPage = CurrentPath + "SaveToFile.aspx"; //the ActionPage's file path
strHostIP = "localhost"; //The host's IP or name 
DWObject.HTTPPort = 80; 
DWObject.HTTPUploadThroughPost(strHostIP,0,strActionPage,"imageData.tif");
if (DWObject.ErrorCode != 0)
alert(DWObject.ErrorString);
else //succeed
alert("Image Uploaded successfully");
}

8.如何使用ADF?希望将每个文档保存在一个单独的文件中。

var iDocumentCounter =0;

function BeginScan(){
    DWObject.OpenSource();

    DWObject.IfShowUI = false;
    DWObject.IfDisableSourceAfterAcquire = true;
    if(DWObject.Duplex != TWDX_NONE)
        DWObject.IfDuplexEnabled = true; //enable duplex

DWObject.IfFeederEnabled = true;
    if (DWObject.IfFeederEnabled == true){
         DWObject.XferCount = -1;

         if(DWObject.IfFeederLoaded == True)
             DWObject.AcquireImage();
    }
}

function DWObject_OnPosttransfer(){
iDocumentCounter = iDocumentCounter + 1;

if(DWObject.SaveAsBMP("C:\\Image\\" + iDocumentCounter + ".bmp", 0) == false)
    alert( DWObject.ErrorString);
}

9.我如何使用SSL?

您可以使用IfSSL属性。下面的JavaScript示例将显示如何使用IfSSL属性。
function btnUpload_onclick() 
{
   DWObject.HTTPPort = 80; 
   DWObject.IfSSL = false; // if 80 is the port number of 
non-secure port

   /* 
   DWObject.HTTPPort = 443; 
   DWObject.IfSSL = true; // if 443 is the port number of secure 
port
   */

   DWObject.HTTPUploadThroughPost("127.0.0.1", 0, 
"/SaveToFile.php", "imageData.jpg");

   if (DWObject.ErrorCode != 0)
      alert(DWObject.ErrorString);
   else //succeed
     alert("Successful");
}

10.如何将新扫描的图像添加到现有的多页TIFF文件中?

function Scan_Click(){
   DWObject.AcquireImage();
}
function DWObject_OnPostTransfer(){
   DWObject.CloseSource();
   DWObject.IfTiffMultiPage = true;
   DWObject.SaveAsTIFF("SaveAsTIFF.tif", 0);
   if (DWObject.ErrorCode != 0)
      alert (DWObject.ErrorString);
   else //succeed
      alert ("Successful");
}

11.如何在保存之前旋转图像?

您可以使用RotateLeft方法和RotateRight方法。

12.如果缓冲区中有多个图像,如何查看指定的图像?

您可以通过更新API CurrentImageIndexInBuffer的值来查看指定的图像或浏览缓冲区中的所有图像。
function NextImage_Click(){
   if (DWObject.HowManyImagesInBuffer == 0) 
   
      alert ("There is no image in buffer");

   DWObject.CurrentImageIndexInBuffer += 1;
}

13.如何进行双面扫描?
function DuplexScan_Click(){
   DWObject.SelectSource();
   DWObject.OpenSource();
   DWObject.IfShowUI = false;
   DWObject.IfDuplexEnabled = true; //enable duplex
   DWObject.AcquireImage();
} 

14.如何以反转颜色扫描图像?

您可以使用PixelFlavor属性。

2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

未发布 MailBee.NET Objects退回邮件教程(一):SMTP部分
by Harriet666 keys 分享 1503479866630
MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持,简单高效。具备“必需”以及独特的功能,这些控件帮助开发人员简单快速地将复杂的电子邮件功能添加到他们的应用程序中。
 
 
MailBee.NET Objects介绍和试用点击查看>>>
 
本文主要介绍了SMTP服务器退回邮件的代码示例。目前MailBee.NET Objects在线订购享75折优惠正在进行中,欢迎您下载试用版进行运用!

所有退回的电子邮件都应该到达一个邮箱地址。这里将其命名为我们的退件通知栏 - bounce@domain.com。显然,你需要确保退回的邮件能有它们的方式到达退件通知栏。
 
让我们看看这些邮件是如何由SMTP服务器发送的。当一封邮件提交给SMTP服务器时,它将被标记返回路径。返回路径是服务器用于与邮件的原始发送方通信的路径,因此返回路径通常是发件人的电子邮件地址(“From”地址)。
 
返回路径记录在邮件中。“From”用于显示发件人地址。返回路径和字段“From”中的地址不必一样。因此,您可以发送一个使用字段“From”的电子邮件显示发件人(jdoe@domain.com),但返回路径将是bounce box地址(bounce@domain.com)。有了这个技巧,所有的反弹消息都将返回到一个特殊的邮箱。
 
那么如何使用MailBee Objects呢?smtp.Send(senderEmail,recipient)方法向指定的收件人电子邮件地址发送电子邮件。第一个参数是发件人的电子邮件地址。如果是空引用,则电子邮件地址取自“From”属性。第二个参数包含收件人电子邮件地址的分隔列表。当第二个参数为空时,收件人列表可以由To、Cc和Bcc列表组合。正如你所看到的,第一个参数是我们组织一个退件栏所需要的。如果将退件栏地址设置为第一个参数,那么所有退回邮件将被发送到特殊地址。
 
注意:某些SMTP服务器不允许从“From”标头中指定的地址发送电子邮件。
 
代码示例:
 
此示例使用SMTP协议发送电子邮件。为了确保所有收件人都收到该邮件,TestSend将被调用。带有传送错误的邮件将来自指定的电子邮件地址。
C#
// Create SMTP object
Smtp mailer = new Smtp();

// Set the message fields.
mailer.From.AsString = "jdoe@domain.com";
mailer.To.AsString = "bill@domain2.com";
mailer.Subject = "Hi";
mailer.BodyPlainText = "This is test message";

// Starts logging SMTP activities into a file. 
mailer.Log.Enabled = true;
mailer.Log.Filename = @"C:\log.txt";
mailer.Log.Clear();

// Specify the server to use. If your server does not require authentication, 
// just omit both last parameters.
mailer.SmtpServers.Add("mail.domain.com", "jdoe", "secret");

// Attempt to connect.
mailer.Connect();

// Display the host name of the server the connection was established with.
Console.WriteLine("Connected to " + mailer.SmtpServers[mailer.GetCurrentSmtpServerIndex()].Name);

// Make sure all the recipients are ok.
if (mailer.TestSend(SendFailureThreshold.AllRecipientsFailed) != TestSendResult.OK)
{
        Console.WriteLine("No recipients can receive the message.");
}// Show refused recipients if any
else if (mailer.GetRefusedRecipients().Count > 0)
{
    Console.WriteLine("The following recipients failed: " + mailer.GetRefusedRecipients().ToString());
}
else
{
    Console.WriteLine("All recipients are ok. Will send the message now.");

    // Send e-mail. If it cannot be delivered, bounce will
    // arrive to bounce@domain3.com, not to joe@domain1.com
    mailer.Send("bounce@domain.com", (string)null);
    Console.WriteLine("Sent to: " + mailer.GetAcceptedRecipients().ToString());
}

// Disconnect from the server
mailer.Disconnect();
VB.NET
' Create SMTP object
Dim mailer As New Smtp

' Set the message fields.
mailer.From.AsString = "jdoe@domain.com"
mailer.To.AsString = "bill@domain2.com"
mailer.Subject = "Hi"
mailer.BodyPlainText = "This is test message"

' Starts logging SMTP activities into a file. 
mailer.Log.Enabled = True
mailer.Log.Filename = "C:\log.txt"
mailer.Log.Clear()

' Specify the server to use. If your server does not require authentication, 
' just remove last 2 parameters.
mailer.SmtpServers.Add("mail.domain.com", "jdoe", "secret")

' Attempt to connect.
mailer.Connect()

' Display the host name of the server the connection was established with.
Console.WriteLine("Connected to " + mailer.SmtpServers(mailer.GetCurrentSmtpServerIndex()).Name)

' Make sure all the recipients are ok.
If mailer.TestSend(SendFailureThreshold.AllRecipientsFailed) <> TestSendResult.OK Then
        Console.WriteLine("No recipients can receive the message.")
Else
    ' Show refused recipients if any
    If mailer.GetRefusedRecipients().Count > 0 Then
        Console.WriteLine("The following recipients failed: " & mailer.GetRefusedRecipients().ToString())
    Else
        Console.WriteLine("All recipients are ok. Will send the message now.")

        ' Send e-mail. If it cannot be delivered, bounce will
        ' arrive to bounce@domain3.com, not to joe@domain1.com
        mailer.Send("bounce@domain.com", CType(Nothing, String))
        Console.WriteLine("Sent to: " + mailer.GetAcceptedRecipients().ToString())
    End If
End If

' Disconnect from the server
mailer.Disconnect()

未发布 跨平台远程框架Remoting SDK发布v9新版本,增加新的Code First服务器等功能
by Harriet666 keys 分享 1493974124538
Remoting SDK原名RemObjects SDK,是一款成功的跨平台远程框架,可通过简单的方法构建分布式应用程序,为应用程序建构与服务器或云端之间的通信。Remoting SDK支持跨平台和移动应用程序开发,支持在C#、 Visual Basic、Oxygene和Swift中的开发,可与Visual Studio和Fire集成,并提供完整的c#源代码。
 
Remoting SDK 9是Remobjects Software公司屡获殊荣的跨平台远程处理框架的新版本,这可能是他们多年来发布的最重要的一次更新。
 
 
点击查看详细的更改日志、功能增强和bug修复的完整列表。

 

Code-First服务器

对Remoting SDK 9最重要的加强是增加了新的Code First服务器。忽略在Service Builder中手动定义服务接口,并保持RODL和代码同步。

只需在代码中定义你的服务,Remoting SDK就完成了。同时支持.NET和Delphi服务器。

点击了解Code-First服务器详情>>>

 

c7cf1614972a47748f328c88cd9a6230ojpg
 

所有新的CodeGen

使用开源CodeGen4框架可以完全修改和简化Remoting SDK客户端存根的代码生成。实际上Remoting SDK-specific codegen logic也是开源的,如有必要,你可以很容易地调整它来满足的需要。

这是Mac和Windows 的rodl2code命令行工具并集成到Fire,Visual Studio,Delphi和Service Builder的补充。

 

 

846905bcec574543a2b0694cbb3e4a04ojpg
 

Mac新的Service Importer app

我们还为Mac创建了一个全新的应用程序,用于连接到远程服务,导入其RODLs并使用CodeGen4为所有语言生成必要的代码存根。开发人员在不使用IDE与专用的Remoting SDK集成的情况下仍然可以轻松连接。

在文档中了解详情>>>

 

 

在Swift中创建构建服务器

Mac和iOS开发人员现在可以在他们的Mac(使用我们免费的Swift编译器和IDE、Fire)上的Swift中创建服务器应用程序,并将它们部署到Linux、Windows和Mac OS X服务器中。

阅读有关Fire的更多信息或浏览Remoting SDK 文档

当然,你也可以在Fire、for Cocoa、Java / Android和.NET中创建客户端应用程序。

 

  

完全支持Swift

Remoting SDK 9使用Xcode或Elements添加了在Swift中编写客户端的功能。支持Swift CodeGen并优化和注释了该库。

 

连接服务器的新工作流程

连接服务器的新工作流程

在所有三个IDE中,使用新的“连接到服务器”菜单选项可以简化将任何客户端应用程序项目连接到服务器的过程。只需将IDE指向你的服务器的URL,你的项目将自动变成一个Remoting SDK客户端,并创建所有必要的引用和代码存根。

新的.remoteRODL文件让你的客户端项目与服务器保持同步,并且一个新的ServerAccess类存根将帮助你开始调用你的服务器。

点击了解详情>>>

 

570d3966ed77495ab0eb3f66d97235a6ojpg
  

改进SSL&TSL

安全通信比以往更重要,Remoting SDK可以让你的服务器通过HTTPS和TLS进行安全通信变得非常容易。无论你使用的是自动生成、自签名还是已购买的证书,现在都可以设置两个属性来实现安全连接。

点击了解详情>>>

 

7ced0f5cc8b64217b447c6e1a05313d9ojpg
 

减少样板代码

我们已经从根本上抽出了很多需要的板卡代码来使一个服务器完全运行起来。

使用RO9,你现在可以使用一行虚拟代码启动一个服务器 - 包括支持运行组合模式(GUI、命令行和后台服务)、设置SSL等。

点击了解详情>>>

 

09f75ee40f72491b940f09f34fd2de4aojpg
 

创建watchOS应用程序

Remoting SDK 9增加了从Apple Watch apps连接到你的服务器的功能,让你的用户可以直接在手腕上访问网络驱动的信息。

 

 

创建tvOS应用程序

同样,你现在可以在你的tvOS apps中使用Remoting SDK客户端功能,将你的数据和服务器内容呈现到大屏幕上。

watchOS和tvOS客户端库都使用与现有的iOS和OS X库相同的代码库,因此在所有四个Apple平台上共享客户端代码非常容易。

 

未发布 TWAIN扫描识别工具Dynamic Web TWAIN发布v13.2,周年限时7折特惠!
by Harriet666 keys 分享 1509603160909
Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件。你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像。然后用户可以编辑图像并将图像保存为多种格式,用户可保存图像到远程数据库或者SharePoint。这个TWAIN控件还支持上传和处理本地图像。Dynamic Web TWAIN13.2下载>>>
慧都十四周年狂欢开启,Dynamic Web TWAIN终极让利7折特惠
限时一个月,错过不再有,马上咨询>>>
 
Dynamic Web TWAIN v13.2更新内容

  • [HTML5 for All]修复了内存泄漏的问题,扫描服务在将图像数据传输到Web浏览器后未释放内存。注意:此错误从版本13.0开始。
  • [HTML5 for Mac]修复了网络服务有时候没有正常关闭的错误。
  • [ActiveX]修复了base64字符串以“==”结尾的错误,无法使用SetCustomDSDataEx方法进行解码。
  • [ActiveX]修复了在调用Dynamsoft.WebTwainEnv.Unload方法之后Dynamsoft.WebTwainEnv.Load方法不起作用的错误。
  • [ActiveX]修复了TransferMode属性无法正常运行的错误。


未发布 Microsoft将持续交付功能添加到Visual Studio、Azure
by Harriet666 keys 分享 1488247992794

Microsoft正在向Visual Studio 2017 IDE中添加持续交付功能。

Visual Studio扩展的持续交付工具允许开发人员在Visual Studio团队服务ALM平台上设置自动构建、测试和发布管道。它适用于面向Azure应用服务和Azure容器服务的ASP.Net 4和ASP.Net Core应用程序。开发人员可以通过IDE中的通知来监视管道,提醒他们连续集成运行中发生的生成失败信息。

具体更新功能点击查看>>>


 近期热门 - 点击最多
  1. ZOT 极简而强大的 Docker OCI 镜像仓库
  2. 用podman代替docker更轻量更安全的云原生容器:替换国内镜像源web窗口管理及开机自动重新启动
  3. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  4. Node.js 打印vite react+go项目目录树
  5. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  6. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  7. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  8. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  9. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  10. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别

  全端社区 - 最新回复
  1. 本地与云 MQTT通信:消息格式定义与配置
  2. MQTT 桥接(Bridging)介绍:解决弱网可靠传输、断网续传
  3. Mosquitto消息中间件简介与部署:本地MQTT服务器部署
  4. MediaMTX 摄像头部署与配置教程
  5. 在网页上播放摄像头RTSP视频流:实时摄像头在线播放的几种架构
  6. 让Docker在Gitea CI/CD流水线中登录http仓库:手写Docker认证信息
  7. ZOT 极简而强大的 Docker OCI 镜像仓库
  8. 用podman代替docker更轻量更安全的云原生容器:替换国内镜像源web窗口管理及开机自动重新启动
  9. 在无管理员权限的情况下,使用安装Python补全pip临时配置环境变量;即零权限使用node.js/npm
  10. Python鉴权方法:Depends 依赖注入;装饰器;与基于Proxy模式的Session状态管理自动计算脏属性;将用户数据存储在Redis中

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

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

OnceOA