I’m almost done with an applescript to change the incoming mail server settings of a user’s email account in Mail on 10.3.x.
At first, it appears to work fine. However, if I open up Mail’s preferences, or try to quit, a disconnected save sheet appears, asking if I should save the modifications to the account. If I confirm the changes, and return to my account settings in Mail’s preferences, the incoming mail server hasn’t changed. I even included a line at the end to test if the server was changing. According to my test, when the script ends, the server name has changed properly, so this seems to be a problem with Mail rather than my script. However, I don’t want to overlook the possibility of an error on my part. Can anyone help me out, or recommend another way to accomplish this change?
It’s specific to Cal Poly accounts, so if you want to recreate the error, you’ll have to make up a fake email address with the incoming mail server as either openmail1.calpoly.edu or openmail2.calpoly.edu
This is my first applescript, by the way, and I’m holding off on breaking the script down into functions (or whatever the terminology is for applescript) until I have it working properly.
Any other helpful comments or bits of advice are more than welcome.
Thanks in advance!
Here’s the script:
tell application “Mail”
set everyMailAccount to every account
set openmailAccounts to {}
set openmailAccountNames to {}
-- Obtain a list of all Openmail accounts in Mail
repeat with rep from 1 to count of everyMailAccount
set thisAccount to item rep of everyMailAccount
if (server name of thisAccount = "openmail1.calpoly.edu" or server name of thisAccount = "openmail2.calpoly.edu") then
--Assert: This is an Openmail account
set end of openmailAccounts to thisAccount
set end of openmailAccountNames to name of thisAccount
else
--Assert: This is NOT an Openmail account
end if
end repeat
set openmailCount to count of openmailAccounts
if (openmailCount is 0) then
--Assert: No Openmail accounts, so notify user and end the script
display dialog "You have no Openmail accounts to migrate" buttons {"OK"} default button 1
else
--Assert: Openmail accounts are present. Continue running
--Get from user name of account to migrate
set nameOfAccountToMigrate to choose from list openmailAccountNames with prompt "The following accounts are still using Openmail. If you are scheduled for migration to Oracle, select the account to migrate and press OK." without multiple selections allowed
set nameOfAccountToMigrate to nameOfAccountToMigrate as string
set accountToMigrate to ""
set oldAccountServer to ""
if (nameOfAccountToMigrate is not equal to false) then
--Assert: User has picked an account to migrate
--Find the account by the name chosen
repeat with rep from 1 to openmailCount
set thisAccount to item rep of openmailAccounts
if (nameOfAccountToMigrate is name of thisAccount) then
--Assert: This is the account chosen
set accountToMigrate to thisAccount
--Save old account server
copy server name of thisAccount to oldAccountServer
else
--Assert: This is not the account chosen
end if
end repeat
--Proceed with migration
tell accountToMigrate to set server name to "mail.calpoly.edu"
display dialog "Congratulations, migration to Oracle is complete! Do you want to keep these changes?" buttons {"Revert back to Openmail", "Accept Migration"} default button 2
if the button returned of the result is "Accept Migration" then
display dialog "That's it! Your incoming mail server is now: "mail.calpoly.edu"" buttons {"OK"} default button 1
else
tell accountToMigrate to set server name to oldAccountServer
display dialog "Migration canceled! Your Openmail settings have been restored." buttons {"OK"} default button 1
end if
--Used to test what the current server name is
set currentServer to server name of accountToMigrate
else
--Assert: The user has chosen to cancel
end if
end if
end tell