I recently had to download some flatfiles from different FTP Resources to load these into a SQL database.
Being a fan of package configurations and minimized maintenance I decided to build a package which would loop through a recordset containing the necessary informations like FTP server, port, user and password instead of creating different packages or steps for each FTP server.
excursion:
I know that storing passwords in a database table is not really best practice for security, but the guys being responsible for the SQL Server are also responsible for the FTP server... 
So, extracting the informations with a SQL Task, including a loop and using expressions to set the correct properties would not be a great challenge I thought. Up to the moment I tried to select the property for the password from the Property Expressions Editor in BIDS:
There is no property which could be used to set the password via expression - this must be a security feature to enable FTP tasks to be "secure by default"...
So what do to do?
Searching the properties for the password prop I recognized that there is a property for the connection - though I should use this for the loop approach instead of building several tasks? But what would be the correct usage of the connection?
Once again like every day in the life of an IT guy I used the "tool which must not be named" [@Microsoft: why don't you find search results even in your own resources???] and et voilà I got the perfect hint in the SSIS forum of MSDN.
The correct syntax for the connection would be Server IP:Port.loginAccount.loginPWD, therefor you could use an expression like this:
@[user::FtpServer] + ":" + @[user::FtpServerPort] +"."+ @[user::FtpAcct] +"."+ @[user::FtpPwd]
to build this connection string. And if you use another variable to build the string - do not forget to set the "evaluate as expression" to TRUE...