lunes, 8 de diciembre de 2014

[FastToUse] - Send mail with Exchange Web Service(EWS) using PHP

What?
How to send emails from inside or outside your organization with Exchange 2007/2010/2013/Online using PHP.

Fast instructions:
  • Go to GitHub PHP-EWS and download the libraries
  • Edit the following example and you will be sending e-mails with Exchange in a minutes.
PHP Code:
 <?php  
 //for debugging purpose only, remove in production  
 error_reporting(E_ALL);   
 ini_set( 'display_errors','1');  
 //Load libraries  
 require_once('ExchangeWebServices.php');  
 require_once('NTLMSoapClient.php');  
 require_once('NTLMSoapClient/Exchange.php');  
 require_once('EWS_Exception.php');  
 require_once('EWSType.php');  
 require_once('EWSType/MessageType.php');  
 require_once('EWSType/EmailAddressType.php');  
 require_once('EWSType/BodyType.php');  
 require_once('EWSType/SingleRecipientType.php');  
 require_once('EWSType/CreateItemType.php');  
 require_once('EWSType/NonEmptyArrayOfAllItemsType.php');  
 require_once('EWSType/ItemType.php');  
 class EwsSendEmail  
 {  
      protected function sendEmail()  
      {  
           $server = 'mail.server.com';  
           $username = 'domain\username';  
           $password = '';  
           $ews = new ExchangeWebServices($server, $username, $password);  
           $msg = new EWSType_MessageType();  
           $toAddresses = array();  
           $toAddresses[0] = new EWSType_EmailAddressType();  
           $toAddresses[0]->EmailAddress = 'user@domain.com';  
           $toAddresses[0]->Name = 'Name Surname';  
           $toAddresses[1] = new EWSType_EmailAddressType();  
           $toAddresses[1]->EmailAddress = 'user2@domain.com';  
           $toAddresses[1]->Name = 'Name2 Surname';  
           $msg->ToRecipients = $toAddresses;  
           $fromAddress = new EWSType_EmailAddressType();  
           $fromAddress->EmailAddress = 'mailFrom@domain.com';  
           $fromAddress->Name = 'NameFrom Surname';  
           $msg->From = new EWSType_SingleRecipientType();  
           $msg->From->Mailbox = $fromAddress;  
           $msg->Subject = 'Test missage from PHP code';  
           $msg->Body = new EWSType_BodyType();  
           $msg->Body->BodyType = 'HTML';  
           $msg->Body->_ = '<p style="font-size: 18px; font-weight: bold;">MESSAGE BODY!</p>';  
           $msgRequest = new EWSType_CreateItemType();  
           $msgRequest->Items = new EWSType_NonEmptyArrayOfAllItemsType();  
           $msgRequest->Items->Message = $msg;  
           $msgRequest->MessageDisposition = 'SendAndSaveCopy';  
           $msgRequest->MessageDispositionSpecified = true;  
           $response = $ews->CreateItem($msgRequest);  
           var_dump($response);  
      }  
      function __construct()  
      {  
           $this->sendEmail();  
      }  
 }  
 $page = new EwsSendEmail();  
 ?>  
More information:
Hope it helps!

domingo, 7 de diciembre de 2014

[FastToUse] - Find Exchange 2010 AntiSpam filtered e-mails.

What?
When you need to check if an email is filtered by Exchange 2010 AntiSpam filters, it use to be a tedious task. This will not be a problem if you use a simple script to find the filtered e-mail by domain o full-e-mail address.

Fast Instructions:
  • Copy & Paste the following PowerShell code into a FindSPAMemails.ps1 file.
  • Save the file in a accessible site in order to use it when necessary.
PowerShell:
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010; . 'C:\Program Files\Microsoft\Exchange Server\V14\bin\Exchange.ps1'
cls
while (1 -eq 1){
                $domini = Read-Host 'Enter the domain name or mail address(i.e: domain.com or mail@domain.com)'
                Write-Host "You entered: " $domini " , starting search..."
                Get-AgentLog | select P1FromAddress,P2FromAddresses,Agent,Action,Reason,ReasonData,Diagnostics,Timestamp | where {$_.Action -ne "AcceptMessage"} | where {$_.P1FromAddress -like "*$domini*"}
                $opcio = Read-Host 'Continue searching? (Y/N), default option -> N'
                while ($ok -ne "ok"){
                               if(($opcio -eq "N") -or ($opcio -eq "n") -or ($opcio -eq "")) {exit}
                               elseif(($opcio -eq "Y") -or ($opcio -eq "y")) {$ok="ok"}
                               else{
                                               $opcio = Read-Host 'Incorrect option, continue searching? (Y/N), default option -> N'
                               }
                }
                $ok=""
}

More Information:

sábado, 18 de octubre de 2014

[FastToUse] Send mail with Exchange Web Service(EWS) using PowerShell

What?
How to send emails from inside or outside your organization with Exchange 2007/2010/2013/Online using PowerShell.

Fast instructions:
  • First of all you need to download and install the latest Microsoft EWS managed API.
  • After that,
    • Select the right DLL path
    • Replace the username, password, EWS url
    • copy&paste 
    • And run it in PowerShell!
PowerShell Code:

#Import the DLL of Microsoft EWS, choose one
##Version 2.2
Import-module "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
##For example if your version is 2.1 with x32 it will be
Import-module "C:\Program Files (x86)\Microsoft\Exchange\Web Services\2.1\Microsoft.Exchange.WebServices.dll"


#Create a Service Object and set Exchange 2010_SP2 version.
#If you don't set it, the default one is Exchange 2013
$version = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($version)

#Set credentials
$username = "domain\username"
$password = "Your_Password"
$service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList $username, $password

#EWS URL, if you do not want to use autodiscover
$url = "https://mail.domain.com/EWS/Exchange.asmx"
$service.Url = $url

#Create the Object and send e-mail
$message = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage -ArgumentList $service
$message.From = "mail@domain.com"
$message.ToRecipients.Add('Recipient Name','recipient_1@domain.com')
$message.ToRecipients.Add('Recipient Name','recipient_2@domain.com')
##You can add more recipients, copying the line before
$message.Subject = "This is a test email"
$message.Body = "Message body. Mail from EWS."

#Send email, choose one
##If you want to send it directly
$message.SendAndSaveCopy()
##If you do not want to send it, only to save to drafts and send later
$message.Save()

More information:



Hope it helps!

[FastToUse] A new series of articles

Hi all,

Sometimes we do not want to read large articles explaining all the detailed information about an issue, code or anything else. We want it fast and running in not much time.

This is the reason of these new series of articles which always will have this structure:

  • [FastToUse] - Tag in the subject
  • What? - A short summary about the article
  • Fast Instructions - The instructions, if needed
  • Code/Bug/... - The core of the article with "the information"
  • More information - Links with detailed information if you want to explore more.
let's go to write!

lunes, 13 de octubre de 2014

Error starting cluster service in a Windows 2008 R2 Cluster

This post born after hours trying to resolve a Cluster issue, and without finding nothing clear in internet!

The problem:
Suddenly the second node of a Windows 2008 R2 Cluster, gets down and there are no way to start it up! The Event Viewer shows the following errors in System log:

Source: Service Control Manager
Event Id:7031
The Cluster Service service terminated unexpectedly. It has done this 1 time(s). The following corrective action will be taken in 60000 milliseconds: Restart Service
Source: Microsoft-Windows-FailoverClustering
Event Id:1069
Cluster resource 'Cluster Disk 1' in clustered service or application 'Cluster group' failed.
Source: Microsoft-Windows-FailoverClustering
Event Id:1573
Node 'node_name' failed to form a cluster. This was because the witness was not accessible. Please ensure that the witness resource is online and available.

Solution:
I tried to restart the server and to stop and start the cluster service with no success.

After that, I checked out the iSCSI configuration in the server and in the SAN, and I found some misconfigurations. After solving it, the problem continues, perhaps this is the origin of the problem, but not all is solved.

My third step is to run cluster service with log using the command:
cluster log /g
You can find the result in %windir%\cluster\reports. I could not see anything useful and went to revise every key of cluster in the regedit configuration at HKLM/Cluster, following some errors found in cluster service log....again no success.

Finally I decide to remove the node from the cluster and rejoin, and SOLVED. Some times its better to start from the end.

To remove a failed node from a cluster:

  1. Run this command from the failed node in elevated Power Shell:
    1. Import-Module FailoverClusters
    2. Clear-clusternode
  2. From the cluster administration MMC > right click on failed server, under nodes > More Actions > Evict
After step 2, you can add the node again into the cluster, and check Event Viewer for additional bugs.

Hope it helps!



sábado, 4 de octubre de 2014

How to uninstall Windows Intune

Easy and FAST!

Run this command with elevated privileges:

wmic product where "name like '%intune%'" call uninstall
If you want to do that by the right way, go to Intune admin console.