Automator -> send file to email (from filename)

applescriptautomatoremail

Im trying to create an Automator folder action that sends an email with an attached file.

In my folder the files will be generated with the email as name:
Example: name@company.com.jpg, othername@othercompany.com.jpg and so on.

What I need is an action that copies the filename, remove the extension (.jpg), create an email and put the filename/email into the "To" and then sends the email.

I all ready have a working version where the file is attached to the e-mail and the content of the e-mail is filled out. But I can't find a solution to copy the file name and specify it to the "To" address.

Hope that someone out there can help me 🙂

Best Answer

I've tried with Automator without succeeding looping through dropped files.

Here's a folder action script that does what you want, and how to attach it to a folder :

1. Open AppleScript Editor

2. Paste the following script into a new document

property mail_subject : "An image for you"
property mail_plain_content : "Attached you will the image you required." & return & return & "Best Regards" & return & "Automator"
property mail_html_content : "Attached you will the image you required.<br><br>Best Regards<br>Automator"

on adding folder items to this_folder after receiving these_items
    processItems(these_items)
end adding folder items to

on processItems(these_items)
    repeat with i from 1 to (count of these_items)
        set this_item to item i of these_items
        if isFolder(this_item) then
            processItems(getFolderItems(this_item))
        else
            processFile(this_item)
        end if
    end repeat
end processItems

on processFile(this_file)
    set mail_address to RemoveExtension(getFileName(this_file))
    tell application "Microsoft Outlook"
        set newMessage to make new outgoing message with properties {subject:mail_subject, plain text content:mail_plain_content, content:mail_html_content}
        tell newMessage
            make new recipient with properties {email address:{address:mail_address}}
            make new attachment with properties {file:this_file as alias}
            send
        end tell
        activate
    end tell
end processFile

on isFolder(this_item)
    tell application "System Events" to return (exists folder (this_item as string))
end isFolder

on RemoveExtension(this_name)
    -- This function comes from :
    -- http://www.macosxautomation.com/applescript/sbrt/index.html
    if this_name contains "." then
        set this_name to (the reverse of every character of this_name) as string
        set dot_offset to the offset of "." in this_name
        set this_name to (text (dot_offset + 1) thru -1 of this_name)
        set this_name to (the reverse of every character of this_name) as string
    end if
    return this_name
end RemoveExtension

on getExtension(this_name)
    if this_name contains "." then
        set this_name to (the reverse of every character of this_name) as string
        set dot_offset to the offset of "." in this_name
        set this_name to (text 1 thru (dot_offset - 1) of this_name)
        set this_name to (the reverse of every character of this_name) as string
        return this_name
    else
        return ""
    end if
end getExtension

on getFileName(this_file)
    tell application "Finder" to return name of this_file
end getFileName

on getFolderItems(this_folder)
    tell application "Finder" to return items of this_folder
end getFolderItems

3. Save it in your ~/Library/Scripts/Folder Action Scripts Folder

Menu File > Save

Go to the right folder : press cmd+G and paste:
~/Library/Scripts/Folder Action Scripts
and click Go

Save as : Image - Email using name as address.scpt (for example)
Format : Script

4. Create a new folder that will be watched for added items

5. Associate the script to the folder

In the Finder, right click on your folder, then select Services > Folder Actions Setup Select the new created Image - Email using name as address.scpt script

You're done, drop a file whose name is an address, mail will be sent.