I think there might be a problem with your CreateItem() method failing to return an object. Since you don't have
strict turned on (shame on you!) you didn't find out that $mailitem is not
defined. Then you use it as a hash ref, which Perl is happy to do for you. And then you try to call send on a hash ref, not an olMailItem (or whatever).
So the simple answer is, use strict; and check your Ole calls with or die. Be sure to read up on Ole mechanisms and the COM Interface to Outlook. The better answer is open Outlook and figure out where the mail server is. Then use Net::SMTP or MIME::Lite or the like. Doing it this way cuts out the overhead of loading Outlook and eliminates your dependence on both MS and Outlook being installed.
Update:
dws caught the source of your Ole error, the constant, but he didn't give you the right answer for what to do about it. You should import the constants via Ole:
use Win32::OLE::Const;
my %olConst = %{ Win32::OLE::Const->Load( "Microsoft Outlook" ) };
Then you can just get them out of that hash table.