VisualBasic How to Send Base64 - vb.net

Right I am stumped as hell and I don't even know what I am doing is right. I have some Base64 code of an image which I am emailing using Visual Basic (codes below) but when I recive the email its just shows the box and red cross.
My knowlage is very slim on this and I have just hacked this together. I could be doing something fundamentily stupid but I would not be aware of it.
Please advise :S
VB Code
Public Sub Main()
Dim mySmtpClient As SmtpClient
Dim myMessage As MailMessage
Dim FileReader As StreamReader
Dim EmailBody As String
FileReader = New StreamReader("D:\Extracts\Body.html")
EmailBody = FileReader.ReadToEnd()
myMessage = New MailMessage("eg#example.com", "eg#example.com")
myMessage.Body = EmailBody
myMessage.IsBodyHtml = True
mySmtpClient = New SmtpClient("Server")
mySmtpClient.Credentials = CredentialCache.DefaultNetworkCredentials
mySmtpClient.Send(myMessage)
Dts.TaskResult = ScriptResults.Success
End Sub
Body.html
<img src="data:image/jpg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABVAAD/4QNtaHR0cDov
L25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENl
aGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4
OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjAtYzA2MCA2MS4xMzQ3NzcsIDIwMTAvMDIvMTItMTc6
MzI6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHht
bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0i
aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1w
PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9
InhtcC5kaWQ6MTY3RkUyMEFCREQ0RTExMUFFODdDOUNGOURFNjQ5MUYiIHhtcE1NOkRvY3VtZW50
SUQ9InhtcC5kaWQ6RjYyRDMzNjdFQzRBMTFFMTg2RDRCN0EyNTQxQTE2QkMiIHhtcE1NOkluc3Rh
bmNlSUQ9InhtcC5paWQ6RjYyRDMzNjZFQzRBMTFFMTg2RDRCN0EyNTQxQTE2QkMiIHhtcDpDcmVh
dG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIj4gPHhtcE1NOkRlcml2ZWRGcm9t
IHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NDk5QTM0OUY0OUVDRTExMUFEQjdGMjZDRTM5OTI3
NTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTY3RkUyMEFCREQ0RTExMUFFODdDOUNGOURF
NjQ5MUYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBh
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"
/>

Try using a hidden attachment as per .net - embedding attached image in html email
Dim plainView As AlternateView = AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", Nothing, "text/plain")
Dim logo As New LinkedResource(Server.MapPath("images1/links/beach-icon.jpg"))
logo.ContentId = "embeddedimage"
Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString("<p>Here is an embedded image.</p> <img src=cid:embeddedimage> <p>More text here</p>", Nothing, "text/html")
htmlView.LinkedResources.Add(logo)
objMM.AlternateViews.Add(plainView)
objMM.AlternateViews.Add(htmlView)

Related

How to send email to different recipient with a different set of data in SSIS or by SQL?

Please suggest me how to achieved this:
The other table having set of data which I need to send:
Now by using SSIS we have to send the set of data to that email. In production I'm having 135 emails and have send them a separate data which contain their set of area.
#pp#gmial.cpm will get only data where subject is maths.
I have no idea to create variable of how to pass variable.
Can any one help me with this?
I use this method a lot for sending emails:
public static void SendEmail(List<string> to, string subject, string body, string filepathName = null)
{
using (MailMessage mail = new MailMessage())
{
string from = ConfigurationManager.AppSettings["EmailFrom"];
SmtpClient SmtpServer = new SmtpClient("your email server");
mail.From = new MailAddress(from);
foreach(string t in to)
mail.To.Add(new MailAddress(t));
mail.Subject = subject;
mail.ReplyToList.Add("your reply to email");
mail.IsBodyHtml = true;
mail.Body = body;
mail.Bcc.Add("enter your email if you want to be copied");
if (filepathName != null)
{
Attachment file;
file = new Attachment(filepathName);
mail.Attachments.Add(file);
}
SmtpServer.Port = 2525; //this is unique to you
SmtpServer.Credentials = new NetworkCredential(from, ConfigurationManager.AppSettings["EmailPassword"]);
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
}
}
This won't completely solve your problem but will give you option of sending HTML emails straight from SSIS Script task.
You won't be able to use configuration manager, you will need to "hard code" that.

WebClient or WebRequest to get the re-directed URL of the landing page

From the string I parsed from Bing's Pic of the Day, I got the info of the pic to be downloaded, let's say today it is /az/hprichbg/rb/PearlHarborWindows_EN-US8565186567, then we will have full URL of the image be like http://www.bing.com/az/hprichbg/rb/PearlHarborWindows_EN-US8565186567_1366x768.jpg
Usually Bing has an image of higher resolutions, so I will download the image 1920x1200 too. It's easy with the URL changed to be like http://www.bing.com/az/hprichbg/rb/PearlHarborWindows_EN-US8565186567_1920x1200.jpg, then give the task to a WebClient such as client1.DownloadFile(url, fileName)
The issue here is, some days, the resolution 1920x1200 is not available, and the download URL of this res.(1920x1200) will be re-directed to the URL of the image /sa/simg/hpb/NorthMale_EN-US8782628354_1920x1200.jpg - as default (you can check it).
So my try was a function to get the return/re-directed URL from the input URL:
Public Function GetWebPageURL(ByVal url As String) As String
Dim Request As WebRequest = WebRequest.Create(url)
Request.Credentials = CredentialCache.DefaultCredentials
Return Request.RequestUri.ToString
End Function
and compare to the input URL to see it they are different, but the result was not as expected.
Could anyone let me know the method to check this re-directed URL, like the return URL after we press Enter and wait for the site to load.
Please give me idea to overcome this obstacle. Thank you!
Notes: Some issues related to access rights on different PCs cause me not to use HttpWebRequest, so I prefer the solution not using HttpWebRequest (WebClient or others are better).
With help from #IvanValadares #AlenGenzić, and suggestion of Proxy for HttpWebRequest from #Jimi, I have come to the fair solution, as the below code:
url1 = "http://www.bing.com/az/hprichbg/rb/PearlHarborWindows_EN-US8565186567_1920x1200.jpg"
Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(url1), HttpWebRequest)
myHttpWebRequest.MaximumAutomaticRedirections = 1
myHttpWebRequest.AllowAutoRedirect = True
Dim defaultProxy As IWebProxy = WebRequest.DefaultWebProxy
If (defaultProxy IsNot Nothing) Then
defaultProxy.Credentials = CredentialCache.DefaultCredentials
myHttpWebRequest.Proxy = defaultProxy
End If
Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse, HttpWebResponse)
url2 = myHttpWebResponse.ResponseUri.ToString
Label1.Text = url1
Label2.Text = url2
Use AllowAutoRedirect and check the StatusCode.
var webRequest = (HttpWebRequest)System.Net.WebRequest.Create("http://www.bing.com/az/hprichbg/rb/PearlHarborWindows_EN-US8565186567_1920x1200.jpg");
webRequest.AllowAutoRedirect = false;
using (var response = (HttpWebResponse)webRequest.GetResponse())
{
if (response.StatusCode == HttpStatusCode.Found)
{
// Have been redirect
}
else if (response.StatusCode == HttpStatusCode.OK)
{
// Have not been redirect
}
}
Using HttpClient
var handler = new HttpClientHandler()
{
AllowAutoRedirect = false
};
HttpClient client = new HttpClient(handler);
HttpResponseMessage response = await client.GetAsync("http://www.bing.com/az/hprichbg/rb/PearlHarborWindows_EN-US8565186567_1920x1200.jpg");
if (response.StatusCode == HttpStatusCode.Found)
{
// Have been redirect
}
else if (response.StatusCode == HttpStatusCode.OK)
{
// Have not been redirect
}
With help from #IvanValadares #AlenGenzić, and suggestion of Proxy for HttpWebRequest from #Jimi, I have come to the fair solution as below:
url1 = "http://www.bing.com/az/hprichbg/rb/PearlHarborWindows_EN-US8565186567_1920x1200.jpg"
Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create(url1), HttpWebRequest)
myHttpWebRequest.MaximumAutomaticRedirections = 1
myHttpWebRequest.AllowAutoRedirect = True
Dim defaultProxy As IWebProxy = WebRequest.DefaultWebProxy
If (defaultProxy IsNot Nothing) Then
defaultProxy.Credentials = CredentialCache.DefaultCredentials
myHttpWebRequest.Proxy = defaultProxy
End If
Dim myHttpWebResponse As HttpWebResponse = CType(myHttpWebRequest.GetResponse, HttpWebResponse)
url2 = myHttpWebResponse.ResponseUri.ToString
Label1.Text = url1
Label2.Text = url2
The System.Net.WebException: The remote server returned an error: (407) Proxy Authentication Required. is no longer thrown.

Adobe Echo Sign Sending PDF file

I am working on Adobe Echo sign,I have downloaded the sample code from their website, I am using this sample code for sendingdocument, it has some code missing in sendDocument method so I have changed it. It's giving SoapHeader Exception,with nothing in InnerException,
{"apiActionId=XHZI4WF4BV693YS"}
below is my code of sending document
public static void sendDocument(string apiKey, string fileName, string recipient)
{
ES = new EchoSignDocumentService16();
FileStream file = File.OpenRead(fileName);
secure.echosign.com.FileInfo[] fileInfos = new secure.echosign.com.FileInfo[1];
fileInfos[0] = new secure.echosign.com.FileInfo(fileName, null, file);
SenderInfo senderInfo = null;
string[] recipients = new string[1];
recipients[0] = recipient;
DocumentCreationInfo documentInfo = new DocumentCreationInfo(
recipients,
"Test from SOAP: " + fileName,
"This is neat.",
fileInfos,
SignatureType.ESIGN,
SignatureFlow.SENDER_SIGNATURE_NOT_REQUIRED
);
DocumentKey[] documentKeys;
senderInfo = new SenderInfo(recipient, "password", "APIKEY");
documentKeys = ES.sendDocument(apiKey, senderInfo, documentInfo);
Console.WriteLine("Document key is: " + documentKeys[0].documentKey);
}
its giving exception on this line
documentKeys = ES.sendDocument(apiKey, senderInfo, documentInfo);
Can anyone suggest some sample code of Adobe Echo Sign?
On the account page of your login there is an API log you can check. If you check the log entry for your request you may find more information there.
I can't see anything immediately wrong with your code however the EchoSign API guide says that the 'tos' field is deprecated and that the recipients field should be used instead. Helpfully this means you can't use the paramaterised constructor. Try creating your document creation info as such (this is C# but if you need Java it should be straightforward to figure out):
RecipientInfo[] recipientInfo = new RecipientInfo[1];
recipientInfo[0] = new RecipientInfo
{
email = "recipient",
role = RecipientRole.SIGNER,
roleSpecified = true
};
DocumentCreationInfo documentCreationInfo = new DocumentCreationInfo
{
recipients = recipientInfo,
name = "Test from SOAP: " + fileName,
message = "This is neat.",
fileInfos = fileInfos,
signatureType = SignatureType.ESIGN,
signatureFlow = SignatureFlow.SENDER_SIGNATURE_NOT_REQUIRED
};
Note that when using the recipientInfo array it seems that the roleSpecified field must be set to true. This little field tripped me up for ages and I was receiving errors similar to yours.

Test zip password correctness in vb.net

I want to test if a zip has a particular password in vb.net. How can I create a function like check_if_zip_pass(file, pass) As Boolean?
I can't seem to find anything in the .net framework that does this already, unless I'm missing something incredibly obvious.
This method should NOT extract the files, only return True if the attempted pass is valid and False if not.
Use a 3rd party library, like DotNetZip. Keep in mind that passwords in zipfiles are applied to entries, not to the entire zip file. So your test doesn't quite make sense.
One reason WinZip may refuse to unpack the zipfile is that the very first entry is protected with a password. It could be the case that only some entries are protected by password, and some are not. It could be that different passwords are used on different entries. You'll have to decide what you want to do about these possibilities.
One option is to suppose that only one password is used on any entries in the zipfile that are encrypted. (This is not required by the zip specification) In that case, below is some sample code to check the password. There is no way to check a password without doing the decryption. So this code decrypts and extracts into Stream.Null.
public bool CheckZipPassword(string filename, string password)
{
bool success = false;
try
{
using (ZipFile zip1 = ZipFile.Read(filename))
{
var bitBucket = System.IO.Stream.Null;
foreach (var e in zip1)
{
if (!e.IsDirectory && e.UsesEncryption)
{
e.ExtractWithPassword(bitBucket, password);
}
}
}
success = true;
}
catch(Ionic.Zip.BadPasswordException) { }
return success;
}
Whoops! I think in C#. In VB.NET this would be:
Public Function CheckZipPassword(filename As String, password As String) As System.Boolean
Dim success As System.Boolean = False
Try
Using zip1 As ZipFile = ZipFile.Read(filename)
Dim bitBucket As System.IO.Stream = System.IO.Stream.Null
Dim e As ZipEntry
For Each e in zip1
If (Not e.IsDirectory) And e.UsesEncryption Then
e.ExtractWithPassword(bitBucket, password)
End If
Next
End Using
success = True
Catch ex As Ionic.Zip.BadPasswordException
End Try
Return success
End Function
I use SharpZipLib in .NET to do this, here is a link to their wiki with a helper function for unzipping password protected zip files. Below is a copy of the helper function for VB.NET.
Imports ICSharpCode.SharpZipLib.Core
Imports ICSharpCode.SharpZipLib.Zip
Public Sub ExtractZipFile(archiveFilenameIn As String, password As String, outFolder As String)
Dim zf As ZipFile = Nothing
Try
Dim fs As FileStream = File.OpenRead(archiveFilenameIn)
zf = New ZipFile(fs)
If Not [String].IsNullOrEmpty(password) Then ' AES encrypted entries are handled automatically
zf.Password = password
End If
For Each zipEntry As ZipEntry In zf
If Not zipEntry.IsFile Then ' Ignore directories
Continue For
End If
Dim entryFileName As [String] = zipEntry.Name
' to remove the folder from the entry:- entryFileName = Path.GetFileName(entryFileName);
' Optionally match entrynames against a selection list here to skip as desired.
' The unpacked length is available in the zipEntry.Size property.
Dim buffer As Byte() = New Byte(4095) {} ' 4K is optimum
Dim zipStream As Stream = zf.GetInputStream(zipEntry)
' Manipulate the output filename here as desired.
Dim fullZipToPath As [String] = Path.Combine(outFolder, entryFileName)
Dim directoryName As String = Path.GetDirectoryName(fullZipToPath)
If directoryName.Length > 0 Then
Directory.CreateDirectory(directoryName)
End If
' Unzip file in buffered chunks. This is just as fast as unpacking to a buffer the full size
' of the file, but does not waste memory.
' The "Using" will close the stream even if an exception occurs.
Using streamWriter As FileStream = File.Create(fullZipToPath)
StreamUtils.Copy(zipStream, streamWriter, buffer)
End Using
Next
Finally
If zf IsNot Nothing Then
zf.IsStreamOwner = True ' Makes close also shut the underlying stream
' Ensure we release resources
zf.Close()
End If
End Try
End Sub
To test, you could create a file compare that looks at the file before it's zipped and again after it has been unzipped (size, date, etc...). You could even compare the contents if you wanted to use a simple test file, like a file with the text "TEST" inside. Lots of choices, depends on how much and how far you want to test.
There's not much built into the framework for doing this. Here's a big sloppy mess you could try using the SharpZipLib library:
public static bool CheckIfCorrectZipPassword(string fileName, string tempDirectory, string password)
{
byte[] buffer= new byte[2048];
int n;
bool isValid = true;
using (var raw = File.Open(fileName, FileMode.Open, FileAccess.Read))
{
using (var input = new ZipInputStream(raw))
{
ZipEntry e;
while ((e = input.GetNextEntry()) != null)
{
input.Password = password;
if (e.IsDirectory) continue;
string outputPath = Path.Combine(tempDirectory, e.FileName);
try
{
using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite))
{
while ((n = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, n);
}
}
}
catch (ZipException ze)
{
if (ze.Message == "Invalid Password")
{
isValid = false;
}
}
finally
{
if (File.Exists(outputPath))
{
// careful, this can throw exceptions
File.Delete(outputPath);
}
}
if (!isValid)
{
break;
}
}
}
}
return isValid;
}
Apologies for the C#; should be fairly straightforward to convert to VB.NET.

XmlReader chopping off whitespace after ampersand entity?

This is strange. I've got a WCF Message and I'm trying to read the contents of the body into an XmlDocument. The contents of the message body look like this on the wire (when inspected with WCF tracing turned on):
<abc>
<timeZone>(GMT-05:00) Eastern Time (US & Canada)</timeZone>
</abc>
The code for the reader looks like this:
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = false;
settings.CheckCharacters = false;
XmlReader bodyReader = XmlReader.Create(
message.GetReaderAtBodyContents().ReadSubtree(), settings);
XmlDocument messageDoc = new XmlDocument();
messageDoc.Load(bodyReader);
The resulting XML in messageDoc looks like this:
<abc>
<timeZone>(GMT-05:00) Eastern Time (US &Canada)</timeZone>
</abc>
So where did the extra whitespace after the original & go?
You can simplify the code by removing the XmlReader. Then set the PreserveWhiteSpace on the XmlDocument. You can replace all of your code with:
XmlDocument messageDoc = new XmlDocument() { PreserveWhitespace = true };
messageDoc.Load(message.GetReaderAtBodyContents().ReadSubtree());